Mongoose findOneAndUpdate 更新多个字段

30
findOneAndUpdate方法不能正常工作。我试图一次性更新所有字段,但它只更新(设置)最后一个字段。总是只有最后一个字段被更新。有人能告诉我哪里做错了或者怎样才能达到期望的效果吗?
这是我的findOneAndUpdate代码:
Book.findOneAndUpdate({_id:bookId},{$set:{"name": name},$set:{"genre": genre},$set:{"author": author},$set:{"similar": similar}}).exec(function(err, book){
       if(err){
           console.log(err);
           res.status(500).send(err);
       } else {
            res.status(200).send(book);
       }
});
1个回答

66

您正在多次使用$set操作符。正确的$set语法是:

{ $set: { <field1>: <value1>, ... } }
你需要这样更改你的update参数:
Book.findOneAndUpdate({ "_id": bookId }, { "$set": { "name": name, "genre": genre, "author": author, "similar": similar}}).exec(function(err, book){
   if(err) {
       console.log(err);
       res.status(500).send(err);
   } else {
            res.status(200).send(book);
   }
});

如果你想在同一个findByIdAndUpdate字段中同时进行$set和$push操作,该如何编写语法呢? - 55 Cancri
10
你只需将$push: { <field>: <value>, ..}添加到"update"参数中即可:{ $set: { <field1>: <value1>, ... }, $push: { <field>: <value>, ..} } - styvane
@styvane,您能否看一下这个问题 https://stackoverflow.com/a/70171269/15454800? - Hesham Eldawy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接