Node.js Mongoose中的多重更新操作

Node.js Mongoose中的多重更新操作,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在尝试使用Mongoose更新单个文档中的多个字段 var fooSchema = new Schema({ foo: { a: [ { type: Number, ref: User, required: true } ], b: [ { type: Number, ref: User } ], c: [ { type: Number, ref: User } ], } }); foo.findByIdAndUpdate( req.params._id,

我正在尝试使用Mongoose更新单个文档中的多个字段

var fooSchema = new Schema({
  foo: {
    a: [ { type: Number, ref: User, required: true } ],
    b: [ { type: Number, ref: User } ],
    c: [ { type: Number, ref: User } ],
  }
});

foo.findByIdAndUpdate(
 req.params._id,
 { 
   $addToSet: { "foo.a" : req.params.user_id },
   $pull: { "foo.b" : req.params.user_id },
   $pull: { "foo.c" : req.params.user_id } 
  },
  { safe: true },
  function(e) {
    ...
  }
);
foo.a
按预期更新,但用户id未从
foo.b
中删除。
使用Mongoose/MongoDB在一个操作中是否可能有多个更新条件?

您需要将两个
$pull
术语组合到一个对象中,因为不能有两个同名字段:

foo.findByIdAndUpdate(
  req.params._id,
  { 
    $addToSet: { "foo.a" : req.params.user_id },
    $pull: {
      "foo.b" : req.params.user_id,
      "foo.c" : req.params.user_id 
    } 
  },
  { safe: true },
  function(e) {
    ...
  }
);

谢谢文档中是否指定了它?@JohnJohnGa它更多地是任何JavaScript对象(或者更一般地说,任何关联数组或散列)的标准限制。