MongoDBにデータを入れるために、mongoimportというコマンドがあります。使ってみることにしました。
コマンドラインには、データベース名、コレクション名、ファイルの形式、ファイルを指定します。JSON形式のファイルからコレクションにデータをインポートすることにします。
mongoimport --db test --collection a --type json --file data.json
テストに次のような簡単なJSONデータを準備しました。
[ {"x": 1, "y": 2}, {"x": 3, "y": 5} ]
Failure parsing JSON string near: [
はぁ? 正しいJSONデータのはずだが? ブラケット('[')でパーズエラーとか言っているので、ブラケットをはずしてみました。
{"x": 1, "y": 2}, {"x": 3, "y": 5}
すると、
Failure parsing JSON string near: , imported 1 objects ERROR: encountered 1 error
うーむ、カンマもダメらしい。
{"x": 1, "y": 2} {"x": 3, "y": 5}
これならインポートできます。
しかし、JSONとして正しい配列形式を許さないって、なんなの? 他のシステムが、正しいJSON配列形式をエクスポート(アンロード)形式として採用してるとき、そのままではインポートできないことになります。ブラケットとカンマをスキップするくらいやればいいのに。
CSV(カンマ区切り)形式もなんだか問題がありそう(現在テスト中)…、データ投入に意外と手間がかかるわ。
[追記]
さらに恐ろしいことが判明。僕が誤解していましたね。インポート可能な形式はJSONじゃないです。独自のインポート形式で、JSON風なだけ。
MongoDBのバージョンはwin32-x86_64-2008plus-2.2.3(最新ではない)です。次のデータはインポートできません。
{ "a": 1 }
$ bin/mongoimport.exe --db test --collection c --type json --file xdata03.json connected to: 127.0.0.1 Fri Sep 13 10:44:43 Assertion: 10340:Failure parsing JSON string near: Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 kernel32.dll BaseThreadInitThunk+0xd Fri Sep 13 10:44:43 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: Fri Sep 13 10:44:43 Fri Sep 13 10:44:43 Assertion: 10340:Failure parsing JSON string near: "a": 1 Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 kernel32.dll BaseThreadInitThunk+0xd Fri Sep 13 10:44:43 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: "a": 1 Fri Sep 13 10:44:43 Fri Sep 13 10:44:43 Assertion: 10340:Failure parsing JSON string near: } Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 mongoimport.exe ??? Fri Sep 13 10:44:43 kernel32.dll BaseThreadInitThunk+0xd Fri Sep 13 10:44:43 exception:BSON representation of supplied JSON is too large: Failure parsing JSON string near: } Fri Sep 13 10:44:43 Fri Sep 13 10:44:43 imported 0 objects Fri Sep 13 10:44:43 ERROR: encountered 3 errors $
どうやら行指向らしくて、テキストの1行に1個のJSONオブジェクトの文字列表現を書かないとダメのようです。ウエー。
[/追記]