2012-07-27 60 views
1

我想使用JSON批量插入mongo集合。无法使用mongoimport插入JSON

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

但是使用在蒙戈外壳产量的语法我想:

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

数据来自哪里?你可能最好用你想要的任何语言(php/python/perl/etc)编写脚本,并直接从那里执行操作(使用语言驱动程序)。 – 2012-08-02 02:07:26

回答

3

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

2

只是添加到安德烈的答案。

Mongoimport采用一个文件,每行包含1个JSON/CSV/TSV字符串并插入它。你可以从标准输入而不是上面的命令。根据here,您可以使用mongoimport执行upsert。

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

以下是mongoimport的完整manual,作为参考,mongoimport不能可靠地保留所有丰富的BSON数据类型。

+0

我试着基于它的命令,但看不到如何使用JSON而不是CSV? – user1556658 2012-07-29 01:46:52

+0

你使用了什么命令? – 2012-07-30 07:52:53

1

Mongoimport不含修饰符,如$ set。您将需要使用mongo --eval命令进行更新。

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

希望这会有所帮助。