MongoDB的更新,从阵列

问题描述:

删档我有这样一个集合: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}}] } }); 

而是返回NULL,它混淆

+0

什么ü希望去做? – vmr 2014-09-18 16:46:59

与通过指定查询来移除元素的$ 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')}}} );

`