MongoDB更新,从数组中删除文档

时间:2014-09-18 16:34:26

标签: 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,它很混乱!

1 个答案:

答案 0 :(得分: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')}}} );

`