我有像我的收藏品中的对象:
{
"foo": {
"actions": [
...,
"delete"
]
},
"bar": {
"tags": ["links", ...]
}
}
我想从delete
字段中包含foo.actions
值的所有对象中移除links
的{{1}}值。
我尝试做一个似乎不起作用的基本更新:
bar.tags
由于以下请求未返回db.foo.update({
"bar.tags": /links/
}, {
$pull: {
"foo.actions": "delete"
}
}, {
multi: true
});
:,因此未删除 delete
字段
0
这里有什么问题?为什么不删除> db.foo.find({"bar.tags": /links/, "foo.actions": /delete/}).count()
786
值?
答案 0 :(得分:1)
它对我有用。也许你没有打电话给正确的系列。 你想要做的是在更新之前和之后打印计数,看看是否存在差异。
示例:
db.foo.find({"bar.tags": /links/, "foo.actions": /delete/}).count() // 4
db.foo.update({
"bar.tags": /links/
}, {
$pull: {
"foo.actions": "delete"
}
}, {
multi: true
});
db.foo.find({"bar.tags": /links/, "foo.actions": /delete/}).count() // 0
设置
var createObj = function(){
var o = {
"foo": {
"actions": [
"ok"
]
},
"bar": {
"tags": ["links"]
}
}
if( Math.random() < 0.5 ){
o.foo.actions.push("delete");
o.foo.actions.push("delete");
o.foo.actions.push("delete");
}
return o;
};
use test;
db.foo.drop();
for(var i = 0; i < 10; i++){
db.foo.insert( createObj() );
}