2014-09-18 6 views
0

У меня есть коллекции, как это:MongoDB обновление, удаление документа из массива

db.users.findOne({'_id':ObjectId("541a8cac7f8b9acf408b4567")}); 
{ 
    "_id" : ObjectId("541a8cac7f8b9acf408b4567"), 
    "friends" : [ 
     { 
      "_id" : ObjectId("541adb1f7f8b9ad0408b4567"), 
      "time" : 1411046195 
     }, 
     { 
      "_id" : ObjectId("541adb1f7f8b9ad0408b5467"), 
      "time" : 1411046123 
     } 
    ] 
} 

и я использую эту возможность для удаления:

db.users.update({'uuid':'wb_2204553113'}, {'$pullAll':{friends:[{_id:ObjectId('541adb1f7f8b9ad0408b4567'), time:{$gt:0}}] } }); 

но возвращение нулевой, это путать

+0

Что и хотят делать? – vmr

ответ

0

В отличие от оператора $ pull, который удаляет элементы путем указания запроса, $ pullAll удаляет элементы, соответствующие указанным значениям.

Так что ваше обновление в этом случае должно быть:

db.users.update( {'uuid' : 'wb_2204553113'}, {$pullAll : {friends: [{_id : ObjectId('541adb1f7f8b9ad0408b4567') , time : 1411046195}]} } );

Обратите внимание на точное значение времени.

Вы можете выразить выше $pull конечно:

db.users.update( {'uuid' : 'wb_2204553113'}, {$pull : {friends: {_id : ObjectId('541adb1f7f8b9ad0408b4567') , time : {$gt : 0}}}} );

Что в вашем случае может быть также выражено как:

db.users.update( {'uuid' : 'wb_2204553113'}, {$pull : {friends: {_id : ObjectId('541adb1f7f8b9ad0408b4567')}}} );

`

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