2017-12-18 345 views
0
子記錄合併更新

比方說,我有一個記錄mongoimport +點符號,具有CSV

{ 
    _id: 100, 
    foo: { 
     bar: 0, 
     baz: 1 
    } 
} 

,我想用CSV與mongoimport更新它

_id,foo.kek 
100,9000 

然而,

mongoimport --type csv --file myfile.csv --headerline --mode merge 

會重寫sub-BSON對象完全:

{ 
    _id: 100, 
    foo: { 
     kek: 9000 
    } 
} 

有沒有辦法做部分更新

{ 
    _id: 100, 
    foo: { 
     bar: 0, 
     baz: 1, 
     kek: 9000 
    } 
} 

mongoimport?有沒有其他有效的方法來做到這一點(我有數百萬條記錄)?

MongoDB的服務器版本:3.0.14

mongoimport版本:r3.4.2

提前感謝!

回答

2

這是不可能與mongoimport。

--mode merge$set就是全部文件:

_, err = up.collection.Upsert(selector, bson.M{"$set": document}) 

https://github.com/mongodb/mongo-tools/blob/cb82c3f9336da19b9cafabf7f57e5e5b0e875338/mongoimport/mongoimport.go#L544

最簡單的方法是打補丁的代碼來定製您的需求,如果你有golang成立。否則,您可以將文件導入臨時集合並使用您選擇的語言進行合併,或者編寫自己的導入實用程序。

+0

感謝您的迴應和建議。我知道我可以用任何編程語言來做,只要有一個體面的mongo驅動程序,我只希望這可以用一些工具或簡單的黑客來完成。 – Anton