Mongoose批量插入或更新文档

时间:2015-07-29 16:02:58

标签: node.js mongodb mongoose

我正在开发一个node.js应用程序,我一直在寻找使用Model.save()函数的方法,因为我想同时保存很多文档,所以它会是浪费网络和处理一个接一个地做。

我找到了批量插入的方法。但是,我的模型有两个使它们唯一的属性,一个ID和一个HASH(我从API获取这些信息,所以我相信我需要这两个信息才能使文档独一无二),所以,如果我得到的话,我想要一个已经存在的对象,它将被更新而不是插入到模式中。

有没有办法做到这一点?我正在阅读有关使用Q进行并发调用以保存对象的内容,但是我仍然认为这会在Mongo服务器上产生不必要的负载,不是吗? Mongo或Mongoose是否有像批量插入或更新一样的方法?

提前致谢

1 个答案:

答案 0 :(得分:3)

我认为您正在寻找Bulk.find(<query>).upsert().update(<update>)功能。

你可以这样使用它:

bulk = db.yourCollection.initializeUnorderedBulkOp();
for (<your for statement>) {
    bulk.find({ID: <your id>, HASH: <your hash>}).upsert().update({<your update fields>});
}
bulk.execute(<your callback>)

对于每个文档,它将查找符合{ID: <your id>, HASH: {your hash}}条件的文档。然后:

  • 如果找到,则会使用{<your update fields>}
  • 更新该文档
  • 否则,它将创建一个新文档

根据需要,它不会在for循环的每次迭代中与mongo服务器建立连接。而是在bulk.execute()行进行一次调用。