Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose-如何使用多个update语句执行单个更新_Javascript_Node.js_Mongodb_Mongoose - Fatal编程技术网

Javascript Mongoose-如何使用多个update语句执行单个更新

Javascript Mongoose-如何使用多个update语句执行单个更新,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我在中看到,可以在一个update命令中发送多个update语句。如何使用Node.js和Mongoose实现这一点 db.runCommand({ update: <collection>, updates: [ { q: <query>, u: <update>, upsert: <boolean>, multi: <boolean> }, { q: <query

我在中看到,可以在一个update命令中发送多个update语句。如何使用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> }
})

想知道是否有一种更适合猫鼬的方法吗?

对于猫鼬来说,目前还没有具体的实现方法。但在编写MongooseAPI时,它仍然构建在节点本机驱动程序之上,这使得所有相同的方法都可以通过使用
.collection
访问器从模型中访问

因此,可以使用以下方法:

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”方法。或者将其放入连接回调或任何您需要的连接检测和保证方法中。

使用批量操作和
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
});