无法使用mongoimport升级JSON

时间:2012-07-27 05:08:45

标签: json mongodb upsert mongoimport

我想使用JSON批量upsert到mongo集合。

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

但是使用我在mongo shell中的语法会产生:

    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的示例。请帮忙!

3 个答案:

答案 0 :(得分:3)

据我所知,MongoImport不评估命令。

答案 1 :(得分:2)

只是为了增加安德烈的答案。

Mongoimport获取一个文件,每行包含1个JSON / CSV / TSV字符串并插入它。您可以从标准输出导入,但不能像上面那样导入。您可以使用mongoimport按照here执行upsert。

您可以使用stoponError option运行mongoimport,这会在遇到错误时强制mongoimport停止。

这是mongoimport的完整manual,作为一个FYI,mongoimport不能可靠地保留所有丰富的BSON数据类型。

答案 2 :(得分:1)

Mongoimport不会使用$ set等修饰符。您需要使用mongo --eval命令进行更新。

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

希望这有帮助。