このブログの更新は Twitterアカウント @m_hiyama で通知されます。
Follow @m_hiyama

メールでのご連絡は hiyama{at}chimaira{dot}org まで。

はじめてのメールはスパムと判定されることがあります。最初は、信頼されているドメインから差し障りのない文面を送っていただけると、スパムと判定されにくいと思います。

参照用 記事

MongoDBのmongoimportでハマった:変なJSON形式

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オブジェクトの文字列表現を書かないとダメのようです。ウエー。

[/追記]