2012-07-27 29 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)' 

希望這會有所幫助。