我有一个这样的集合:
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 :(得分: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')}}}
);
`