1

JSON を使用して、mongo コレクションにバッチ アップサートしたいと考えています。

    $ mongoexport -d myDB -c myCollection
    connected to: 127.0.0.1
    { "_id" : "john", "age" : 27 }

しかし、mongo シェルで使用する構文を使用すると、次の結果が得られます。

    0$ echo '{_id:"john", {$set:{gender:"male"}}' | mongoimport --upsert --upsertFields _id -d myDB -c myCollection
    connected to: 127.0.0.1
    Fri Jul 27 15:01:32 Assertion: 10340:Failure parsing JSON string near: , {$set:{g
    0x581a52 0x528554 0xa9f2e3 0xaa1593 0xa980cd 0xa9c062 0x3e7ca1ec5d 0x4fe239
    ...
    /lib64/libc.so.6(__libc_start_main+0xfd) [0x3e7ca1ec5d]  mongoimport(__gxx_personality_v0+0x3c9) [0x4fe239]
    exception:Failure parsing JSON string near: , {$set:{g

    imported 0 objects
    encountered 1 error

中括弧なしで試してみると、エラーは発生しませんが、テーブルは変更されません。

    0$ echo '{_id:"john", $set:{gender:"male"}}' | mongoimport --upsert --upsertFields _id -d myDB -c myCollection
    connected to: 127.0.0.1
    imported 1 objects
    0$ mongoexport -d myDB -c myCollection
    connected to: 127.0.0.1
    { "_id" : "john", "age" : 27 }
    exported 1 records

どこでも検索しましたが、JSON を使用した例が見つかりません。助けてください!

4

3 に答える 3

3

私の知る限りでは、MongoImport はコマンドを評価しません。

于 2012-07-27T06:29:20.170 に答える
2

アンドレの答えに追加するだけです。

Mongoimportは、1行に1つのJSON / CSV/TSV文字列を含む単一のファイルを取得して挿入します。標準出力からインポートできますが、上記のようにコマンドとしてインポートすることはできません。ここのように、mongoimportを使用してアップサートを実行できます。

stoponErrorオプションを指定してmongoimportを実行できます。これにより、エラーが発生したときにmongoimportが強制的に停止されます。

これがmongoimportの完全なマニュアルです。参考までに、mongoimportはすべてのリッチBSONデータ型を確実に保持するわけではありません。

于 2012-07-27T09:37:46.057 に答える
1

Mongoimport は $set などの修飾子を取りません。mongo --eval コマンドを使用して更新する必要があります。

mongo myDB --eval 'db.myCollection.update({_id: "john"}, {$set:{gender:"male"}}, upsert=true)'

お役に立てれば。

于 2012-10-20T12:43:23.240 に答える