首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB批量保存等效?

MongoDB批量保存等效?
EN

Stack Overflow用户
提问于 2014-10-02 18:49:29
回答 1查看 3.9K关注 0票数 3

我是一个mongodb,在使用MongoDB大容量操作创建与大容量保存等效的(因为我找不到大容量保存操作)时遇到了一些困难。简单地说,给出了一系列文件:

代码语言:javascript
运行
复制
[{ _id:1, name:"a" ... }, { _id:1, name:"b" ... } ... ]

我想大容量地插入数组中的文档,使用_id属性作为比较字段,以确定哪些传入记录等同于mongodb中的记录。在伪代码中,我希望mongodb按以下方式批量插入:

代码语言:javascript
运行
复制
if(incomingDocument._id == existingDocument._id){
  update(incoming) // overwrite existing document with entire incoming document
} else {
  insert(incoming)
}

理想情况下,我希望为每个文档传递一个数组和一个比较器与排队的单个批量操作。

如何/我可以用Bulk.find().upsert().update(<update>);或类似的方法来完成这个任务呢?(或者,是否存在无文档的批量保存()操作?)

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-02 20:23:53

Bulk.find.upsert

如果upsert选项设置为true,如果Bulk.find()条件不存在匹配的文档,则更新或替换操作将执行插入操作。如果匹配的文档确实存在,则更新或替换操作将执行指定的更新或替换。

但是,您需要遍历您的集合:

代码语言:javascript
运行
复制
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()) {
    ...
}

或多或少,我很抱歉我现在无法测试它。我也不能说它将如何处理大量的文件。

更新

我按照科林的建议修改了代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26167537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档