我想使用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的示例。请帮忙!
答案 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)'
希望这有帮助。