1

我想使用 JSON 批量更新到 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 的示例。请帮忙!

4

3 回答 3

3

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

于 2012-07-27T06:29:20.170 回答
2

只是为了补充安德烈的答案。

Mongoimport 采用每行包含 1 个 JSON/CSV/TSV 字符串的单个文件并将其插入。您可以从标准输出导入,但不能像上面那样作为命令导入。您可以按照此处使用 mongoimport 执行 upsert 。

您可以使用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 回答