我是一个mongodb,在使用MongoDB大容量操作创建与大容量保存等效的(因为我找不到大容量保存操作)时遇到了一些困难。简单地说,给出了一系列文件:
[{ _id:1, name:"a" ... }, { _id:1, name:"b" ... } ... ]
我想大容量地插入数组中的文档,使用_id属性作为比较字段,以确定哪些传入记录等同于mongodb中的记录。在伪代码中,我希望mongodb按以下方式批量插入:
if(incomingDocument._id == existingDocument._id){
update(incoming) // overwrite existing document with entire incoming document
} else {
insert(incoming)
}
理想情况下,我希望为每个文档传递一个数组和一个比较器与排队的单个批量操作。
如何/我可以用Bulk.find().upsert().update(<update>);
或类似的方法来完成这个任务呢?(或者,是否存在无文档的批量保存()操作?)
谢谢!
发布于 2014-10-02 20:23:53
Bulk.find.upsert
如果upsert选项设置为true,如果Bulk.find()条件不存在匹配的文档,则更新或替换操作将执行插入操作。如果匹配的文档确实存在,则更新或替换操作将执行指定的更新或替换。
但是,您需要遍历您的集合:
var bulk = db.items.initializeUnorderedBulkOp();
myDocumnets.forEach(function(doc) {
bulk.find({_id: doc._id}).upsert().replaceOne(doc);
});
bulk.execute({w: 1, j: true}, function (err, result) {
if (result.isOk()) {
...
}
或多或少,我很抱歉我现在无法测试它。我也不能说它将如何处理大量的文件。
更新
我按照科林的建议修改了代码。
https://stackoverflow.com/questions/26167537
复制相似问题