猫鼬 - 如何使用多个更新语句进行单个更新
Mongoose - How to do a single update with multiple update statements
我在mongodb文档中看到可以在单个更新命令中发送多个更新语句。你会如何使用 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
有兴趣知道是否有一种对猫鼬更友好的方法吗?
直接对于猫鼬,现在还没有具体的实现。但在编写时,猫鼬 API 仍然构建在节点本机驱动程序之上,这使得使用 .collection
访问器可以从模型中访问所有相同的方法。
因此,批量 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()
,因此这比原始命令表单更干净。这实际上是将其分解为引擎盖下的内容。
但请注意,基本驱动程序方法的工作方式与猫鼬方法实现的方式不同。最大的区别在于与数据库的连接。猫鼬的连接方式以及如何在连接回调之外调用语句意味着它自己的方法在尝试执行任何操作之前"等待"建立该连接。
所以你可以使用它,但你需要确保在调用此代码之前总是触发其他一些"猫鼬"方法。或者以其他方式放置在连接回调或所需的任何连接检测和保证方法中。
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- Javascript循环不会自我更新
- 如何在ReactJS JSX中执行嵌套的if-else语句
- 添加文字和评论功能更新Div
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过CSV文件上载更新数据库表
- 平均值:无法将数据更新到数据库
- $rootScope未使用forEach进行更新
- d3基于用户选择动态更新节点
- 有条件更新d3.js力图中节点的最佳方法
- Angular:更新一次性绑定的数据
- Javascript更新孙窗口中的表单元素
- 使用AngularJS中的筛选器更新给定的表
- 使用 IF 语句更新 mysql 查询
- 猫鼬 - 如何使用多个更新语句进行单个更新
- If语句更新变量
- 为什么我不能在Javascript中使用赋值语句简单地更新数组[I] ?
- 为什么我的MYSQL UPDATE语句不会更新