gpt4 book ai didi

javascript - Mongoose - 如何使用多个更新语句进行单个更新

转载 作者:可可西里 更新时间:2023-11-01 10:29:51 26 4
gpt4 key购买 nike

我在 mongodb docs 中看到可以在单个更新命令中发送多个更新语句。你会如何使用 Node.js 和 Mongoose 做到这一点?

db.runCommand({
update: <collection>,
updates:
[
{ q: <query>, u: <update>, upsert: <boolean>, multi: <boolean> },
{ q: <query>, u: <update>, upsert: <boolean>, multi: <boolean> },
{ q: <query>, u: <update>, upsert: <boolean>, multi: <boolean> },
...
],
ordered: <boolean>,
writeConcern: { <write concern> }
})

看来我们可以像这样访问驱动程序的 db 对象。

 YourModel.db.db

想知道是否有更适合 Mongoose 的方式来解决这个问题?

最佳答案

直接对于 mongoose 目前还没有具体的任何实现。但是在编写 mongoose API 时仍然构建在 Node native 驱动程序之上,这使得所有相同的方法都可以通过使用 .collection 访问器从模型中访问。

所以 Bulk API然后可用的方法:

var bulk =  Model.collection.initializeOrderedBulkOp();
var index = 0

// start some loop of statements
{
bulk.find({ }) // find to match
.updateOne({}); // update one

bulk.find({})
.update({}); // applies to multi

bulk.find({})
.upsert().updateOne(); // marks an "upsert"
}

bulk.execute(function(err,response) {
// response object has details of operations
});

此外,还有所有其他方法都可以包含在“批量”批处理中,例如 .insert().remove(),所以这是可行的比原始命令形式更干净一点。这实际上就是将其分解为引擎盖下的内容。

请注意,基本驱动程序方法的工作方式与 mongoose 方法实现的工作方式不同。最大的区别在于与数据库的连接。 mongoose 连接的方式以及您如何在连接回调之外调用语句意味着它有自己的方法“等待”在尝试执行任何操作之前建立该连接。

因此您可以使用它,但您需要确保在调用此代码之前始终触发其他一些“mongoose”方法。或者以其他方式放置在连接回调或您需要的任何连接检测和保证方法中。

关于javascript - Mongoose - 如何使用多个更新语句进行单个更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27966977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com