2017-12-18 343 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