Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.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
Node.js 通过一次调用更改多个文档中的字段_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js 通过一次调用更改多个文档中的字段

Node.js 通过一次调用更改多个文档中的字段,node.js,mongodb,express,mongoose,Node.js,Mongodb,Express,Mongoose,我有一个使用mongo的node/express应用程序 我有一个名为“paymentMethods”的集合,我在其中存储包含以下内容的文档: { owner_id, name_on_card, card_number_last_4, isActive } 所有者在此集合中可以有多张卡 当我添加一张新卡时,我会将“isActive”设置为真,如下所示: router.route('/') .post(function( req, res ){ PaymentMe

我有一个使用mongo的node/express应用程序

我有一个名为“paymentMethods”的集合,我在其中存储包含以下内容的文档:

{
   owner_id,
   name_on_card,
   card_number_last_4,
   isActive
}
所有者在此集合中可以有多张卡

当我添加一张新卡时,我会将“isActive”设置为真,如下所示:

router.route('/')
.post(function( req, res ){


  PaymentMethod.findAndUpdate({owner_id:req.body.ownerId})

  var paymentMethod = new PaymentMethod();

    paymentMethod.owner_id = req.body.ownerId;
    paymentMethod.card_number = req.body.cardNumber; 
    paymentMethod.name_on_card = req.body.nameOnCard;
    paymentMethod.exp_date = req.body.expDate;
    paymentMethod.cvv = req.body.cvv;
    paymentMethod.zipcode = req.body.zipCode;
    paymentMethod.active = true;

    console.log('Payment information passed: ', paymentMethod);


    paymentMethod.save(function(err, paymentMethod){
      if(err)
        res.send(err);
      res.json(paymentMethod);
    })

});
我想弄清楚的是,如何在同一个调用中更新所有其他匹配记录,并将其“isActive”字段设置为null或false


提前感谢大师

我认为这是不可能的。您正在尝试插入一个文档并更新其他文档。不管你在猫鼬身上发现了什么把戏,这至少是2个运算。你“可以”使用一个数值,而不是
bool
。然后,您可以通过“切换”。但是这里的问题是“创建”部分,没有这样的操作可以在单个请求中实际“创建”新的内容以及“更新其他匹配项”。您可以使用在“一个请求”中发送“多个操作”的。否则,在一个请求中就没有另外一个选项来处理这两件不同的事情,所以在一个调用中就没有办法做到这一点。我必须先进行findAndUpdate,基本上先将每个文档中的所有isActive字段设置为null。然后创建新卡。在更新哪个卡应该是活动的情况下,相同的事情?我在正确的轨道上吗?我认为这是不可能的。您正在尝试插入一个文档并更新其他文档。不管你在猫鼬身上发现了什么把戏,这至少是2个运算。你“可以”使用一个数值,而不是
bool
。然后,您可以通过“切换”。但是这里的问题是“创建”部分,没有这样的操作可以在单个请求中实际“创建”新的内容以及“更新其他匹配项”。您可以使用在“一个请求”中发送“多个操作”的。否则,在一个请求中就没有另外一个选项来处理这两件不同的事情,所以在一个调用中就没有办法做到这一点。我必须先进行findAndUpdate,基本上先将每个文档中的所有isActive字段设置为null。然后创建新卡。在更新哪个卡应该是活动的情况下,相同的事情?我走对了吗?