2014-08-31 4 views
1

Я пытаюсь обновить несколько полей в одном документе с помощью 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, 
{ 
    $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 обновляется, как ожидается, но user_id не удаляется из foo.b. Возможно ли иметь несколько условий обновления в одной операции с использованием Mongoose/MongoDB?

ответ

3

Вы должны объединить оба $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) { 
    ... 
    } 
); 
+0

Спасибо! Это указано в документации? – JohnJohnGa

+0

@JohnJohnGa Это скорее стандартное ограничение любого объекта JavaScript (или, в более общем плане, любого ассоциативного массива или хэша). – JohnnyHK

Смежные вопросы