Mongoose保存多个更新的文档



我有一种情况,我需要更新集合中的多个文档,但是每个更新都是逻辑驱动的,并且不是统一的。换句话说,我不想对每个受影响的文档应用相同的更新。每个文档的更改将由系统上的一些逻辑驱动。

在执行这个逻辑之后,我有了一个在应用程序空间中使用标准JS操作编辑的文档数组,如:

someDocument.someField = "some new value";
someDocument.someRef = otherDocument._id;
editedDocs.push(someDocument);

然后我通常会这样做:

for (let i = 0; i < editedDocs.length; i++) {
await editedDocs[i].save({session});
}

我将更新放入事务中,因此它们自动成功/失败。但是我注意到这种方法很慢,一次编辑200个文档需要大约15秒才能完成。

我正在寻找的是在一个函数调用中保存editedDocs数组中的所有文档的能力。

这样的调用存在吗?

谢谢!

@R2D2以评论的形式回答了我的问题。

它实际上给我指明了正确的方向。我想要的操作实际上是Model.bulkSave(),它最终使用Model.bulkWrite()。

我还必须从5更新Mongoose。因为Model.bulkSave()在版本5中。X不尊重事务。在版本6中。因此,我可以在一次调用中保存在应用程序空间中编辑的多个文档,而无需在事务中循环,这满足了我的所有要求。

查看更多信息:https://mongoosejs.com/docs/api/model.html#model_Model-bulkSave

由于@R2D2

最新更新