jsonファイルのMongoimport


173

約2000件のレコードで構成されるjsonファイルがあります。mongoデータベースのドキュメントに対応する各レコードは、次のようにフォーマットされます。

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify: new Date("Fri May 11 15:05:42 2012"),
startTime: new Date("Thu May 31 15:59:39 2012"),
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}},

各レコードはJSONファイルの単一行にあり、改行のみが各レコードの最後にあります。したがって、ドキュメントの各行は "{jobID:"で始まります...次のコマンドを使用して、これらをmongoデータベースにインポートしようとしています:

mongoimport --db dbName --collection collectionName --file fileName.json

ただし、次のエラーが発生します。

Sat Mar  2 01:26:12 Assertion: 10340:Failure parsing JSON string near: ,execModif
0x10059f12b 0x100562d5c 0x100562e9c 0x10025eb98 0x10000e643 0x100010b60 0x10055c4cc 0x1000014b7    
0x100001454 
 0   mongoimport                         0x000000010059f12b _ZN5mongo15printStackTraceERSo + 43
 1   mongoimport                         0x0000000100562d5c _ZN5mongo11msgassertedEiPKc + 204
 2   mongoimport                         0x0000000100562e9c _ZN5mongo11msgassertedEiRKSs + 12
 3   mongoimport                         0x000000010025eb98 _ZN5mongo8fromjsonEPKcPi + 1576
 4   mongoimport                         0x000000010000e643          
                                         _ZN6Import8parseRowEPSiRN5mongo7BSONObjERi + 2739
 5   mongoimport                         0x0000000100010b60 _ZN6Import3runEv + 7376
 6   mongoimport                         0x000000010055c4cc _ZN5mongo4Tool4mainEiPPc + 5436
 7   mongoimport                         0x00000001000014b7 main + 55
 8   mongoimport                         0x0000000100001454 start + 52
Sat Mar  2 01:26:12 exception:BSON representation of supplied JSON is too large: Failure parsing    
    JSON string near: ,execModif
Sat Mar  2 01:26:12 
Sat Mar  2 01:26:12 imported 0 objects
Sat Mar  2 01:26:12 ERROR: encountered 1941 errors

何が問題なのかわかりません。誰かが解決策を推奨できますか?

回答:


301

次のクエリを使用してエラーを修正できました。

mongoimport --db dbName --collection collectionName --file fileName.json --jsonArray

うまくいけば、これは誰かに役立ちます。


28
--jsonArrayチケットでしょ?
Dudo

4
これの短い形式mongoimport -d <database> -c <collection> --jsonArray -f <filename>.json
Adam Faryna、

1
時々 、ユーザ/パスワードが要求されるmongoimport --db dbName --collection collectionName --file fileName.json --jsonArray -u ser -p password
ディエゴ・アンドレス・ディアスエスピノーザ

@DiegoAndrésDíazEspinozaコメントに追加すると、私の場合、「メカニズム 'SCRAM-SHA-1'を使用して認証できない」というエラーが発生しました。そのため、検索の結果、authenticationDatabase回答stackoverflow.com/a/58067928/6791222に記載されているキーワードが欠落していることがわかりました。
フェローズカーン

61

これを試して、

mongoimport --db dbName --collection collectionName <fileName.json

例、

mongoimport --db foo --collection myCollections < /Users/file.json
connected to: *.*.*.*
Sat Mar  2 15:01:08 imported 11 objects

問題は、日付の形式が原因です。

以下のように変更された日付で同じJSONを使用しましたが、うまくいきました

{jobID:"2597401",
account:"XXXXX",
user:"YYYYY",
pkgT:{"pgi/7.2-5":{libA:["libpgc.so"],flavor:["default"]}},     
startEpoch:"1338497979",
runTime:"1022",
execType:"user:binary",
exec:"/share/home/01482/XXXXX/appker/ranger/NPB3.3.1/NPB3.3-MPI/bin/ft.D.64",
numNodes:"4",
sha1:"5a79879235aa31b6a46e73b43879428e2a175db5",
execEpoch:1336766742,
execModify:{"$date" : 1343779200000},
startTime:{"$date" : 1343779200000},
numCores:"64",
sizeT:{bss:"1881400168",text:"239574",data:"22504"}}

お役に立てれば


質問と同じエラーがあります...このインポートを確認しましたか?
Denis Nikanorov 2013年

私はあなたが提案したように日付を調整しました、そしてそれはその特定のエラーを取り除きました。しかし、今、私は新しいものを手に入れています。これが新しいエラーです:
amber4478

新しいJSONと現在使用しているMongoのバージョンを貼り付けることはできますか?
Srivatsa N 2013

クエリの最後に--jsonArrayを追加することでエラーを修正できました。
amber4478 2013

フォルダー名にスペースが含まれている場合"".json、を使用する必要があります。下のAbhiで答え ために、例えば これは仕事、追加する必要はありません""、それをインポートするには、JSONファイルの場所へ。 D:\>mongoimport --db testimport --collection small_zip < D:\Dev\test test\small_zips.json The system cannot find the file specified. これは機能します D:\>mongoimport --db testimport --collection small_zip < "D:\Dev\test test\small_zips.json" 2016-04-17T18:32:34.328+0800 connected to: localhost 2016-04-17T18:32:34.610+0800 imported 200 documents
Abhijeet

22

mongoimportを使用すると、同じことを達成できます

mongoimport --db test --collection user --drop --file ~/downloads/user.json

どこ、

test - Database name
user - collection name
user.json - dataset file

--drop 既に存在する場合、コレクションを削除します。



6

以下のコマンドをDBのエクスポートに使用しました

mongodump --db database_name --collection collection_name

以下のコマンドは私がDBをインポートするために働いた

mongorestore --db database_name path_to_bson_file

6

あなたの構文は完全に正しいように見えます:

mongoimport --db dbName --collection collectionName --file fileName.json

正しいフォルダにいることを確認するか、フルパスを指定してください。


3

別の端末でインポートコマンドを実行します。(mongoシェル内にはありません。)

mongoimport --db test --collection user --drop --file ~/downloads/user.json

3

Windows cmdではコマンドプロンプトコマンドを使用でき 、Ubuntuではterminal次のコマンドを入力して使用できます。

mongoimport  -d  your_database_name  -c  your_collection_name  /path_to_json_file/json_file_name.json

次に、mongoシェルを開くと、このコマンドを実行するときにdatabase_nameを確認します。

show databases

2

このコマンドは、コレクションが指定されていない場合に機能します。

mongoimport --db zips "\MongoDB 2.6 Standard\mongodb\zips.json"

コマンド実行後のMongoシェル

connected to: 127.0.0.1
no collection specified!
using filename 'zips' as collection.
2014-09-16T13:56:07.147-0400 check 9 29353
2014-09-16T13:56:07.148-0400 imported 29353 objects

1

私はこのようなものを試しましたが、実際に機能します:

mongoimport --db dbName --file D:\KKK\NNN\100YWeatherSmall.data.json

1

これは、dbがusrnameとパスワードを使用しているときに機能します

mongoimport --db YOUR_DB --collection MyCollection --file /your_path/my_json_file.json -u my_user -p my_pass

ユーザー名とパスワードのないdbを削除してください -u my_user -p my_pass

私のサンプルjson

{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677d"), 
    "empid" : NumberInt(1), 
    "name" : "Rahul"
}
{ 
    "_id" : ObjectId("5d11c815eb946a412ecd677e"), 
    "empid" : NumberInt(2), 
    "name" : "Rahul"
}

1

解決:-

mongoimport --db databaseName --collection tableName --file filepath.json

例:-

ファイルを管理フォルダに配置します:-

C:\Users\admin\tourdb\places.json

ターミナルでこのコマンドを実行します:

mongoimport --db tourdb --collection places --file ~/tourdb/places.json

出力:-

admin@admin-PC MINGW64 /
$ mongoimport --db tourdb --collection places --file ~/tourdb/places.json
2019-08-26T14:30:09.350+0530 connected to: localhost
2019-08-26T14:30:09.447+0530 imported 10 documents

詳細リンク


1
  1. 例 "C:\ persons.json"のようにjsonファイルのパスをコピーするだけです
  2. C:\ Program Files \ MongoDB \ Server \ 4.2 \ binに移動します
  3. そのmongodb binフォルダーでcmdを開き、このコマンドを実行します

mongoimport --jsonArray --db dbname--collection collectionName--file FilePath

mongoimport --jsonArray --db learnmongo --collections person --file C:\ persons.json


0

このテストコレクションをエクスポートしようとすると、次のようになります。

> db.test.find()
{ "_id" : ObjectId("5131c2bbfcb94ddb2549d501"), "field" : "Sat Mar 02 2013 13:13:31 GMT+0400"}
{"_id" : ObjectId("5131c2d8fcb94ddb2549d502"), "field" : ISODate("2012-05-31T11:59:39Z")}

mongoexport(最初に作成された日付Date(...)と2番目に作成された日付new Date(...)(使用ISODate(...)が2行目と同じ場合))を使用すると、mongoexportの出力は次のようになります。

{ "_id" : { "$oid" : "5131c2bbfcb94ddb2549d501" }, "field" : "Sat Mar 02 2013 13:13:31 GMT+0400" }
{ "_id" : { "$oid" : "5131c2d8fcb94ddb2549d502" }, "field" : { "$date" : 1338465579000 } }

厳密なJSONにはtypeがないため、同じ表記法を使用する必要がありますDate( <date> )

また、JSONは無効です。すべてのフィールド名は二重引用符で囲む必要がありますが、mongoimportはそれらがなくても正常に機能します。

追加情報は、mongodbのドキュメントここにあります


私はあなたが提案したように日付を調整しました、そしてそれはその特定のエラーを取り除きました。しかし、今、私は新しいものを手に入れています。新しいエラーは次のとおりです: '土曜日3月2日15:22:07例外:提供されたJSONのBSON表現が大きすぎます:data: "1949土曜日2 15:22:07土曜日2 15:22 :07インポートされた0オブジェクト土3月2日15:22:07エラー:34763エラーが発生しました '
amber4478

フィールドに報じられた別のエラーだと思うsizeT:{data: "1949..."}}
デニス・

0

おそらく答えに少し遅れて、新しい人を助けるかもしれません。データベースのインスタンスが複数ある場合:

mongoimport --host <host_name>:<host_port> --db <database_name> --collection <collection_name>  --file <path_to_dump_file> -u <my_user> -p <my_pass>

資格情報が必要であると想定し、それ以外の場合はこのオプションを削除します。


0

指揮をとりたいのですが、回答数は出ています。よく使っていました。それは誰かを助けるかもしれません。

mongoimport original.json -d databaseName -c yourcollectionName --jsonArray --drop
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.