我正在开发一个node.js应用程序,我一直在寻找使用Model.save()函数的方法,因为我想同时保存很多文档,所以它会是浪费网络和处理一个接一个地做。
我找到了批量插入的方法。但是,我的模型有两个使它们唯一的属性,一个ID和一个HASH(我从API获取这些信息,所以我相信我需要这两个信息才能使文档独一无二),所以,如果我得到的话,我想要一个已经存在的对象,它将被更新而不是插入到模式中。
有没有办法做到这一点?我正在阅读有关使用Q进行并发调用以保存对象的内容,但是我仍然认为这会在Mongo服务器上产生不必要的负载,不是吗? Mongo或Mongoose是否有像批量插入或更新一样的方法?
提前致谢
答案 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()
行进行一次调用。