从数组MongoDB对象中删除字符串
我的收藏中有如下对象:从数组MongoDB对象中删除字符串,mongodb,Mongodb,我的收藏中有如下对象: { "foo": { "actions": [ ..., "delete" ] }, "bar": { "tags": ["links", ...] } } 我想从foo.actions中删除delete值,该值来自bar.tags字段中包含链接的所有对象 我尝试了一个基本的更新,但似乎不起作用: db.foo.update({ "bar.tags": /lin
{
"foo": {
"actions": [
...,
"delete"
]
},
"bar": {
"tags": ["links", ...]
}
}
我想从foo.actions
中删除delete
值,该值来自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
这里有什么问题?为什么delete
值没有被删除?这对我很有效。也许你打错电话了。
您要做的是打印更新前后的计数,以查看是否有差异
例如:
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(){
变量o={
“foo”:{
“行动”:[
“好的”
]
},
“酒吧”:{
“标记”:[“链接”]
}
}
if(Math.random()<0.5){
o、 foo.actions.push(“删除”);
o、 foo.actions.push(“删除”);
o、 foo.actions.push(“删除”);
}
返回o;
};
使用试验;
db.foo.drop();
对于(变量i=0;i<10;i++){
db.foo.insert(createObj());
}
当我尝试它时,效果很好。@johnyhk标签
在另一个对象的内部。也许这就不同了?奇怪的是运行db.foo.update({“bar.tags”:“links”,“foo.actions”:“delete”},{“$pull”:{“foo.actions”:“delete”},{multi:true})
。无论如何,谢谢你的回答!出现此问题是因为我在foo.actions
中有一个字段deleteImage
。当我数着foo.actions:/delete/
时,他们被抓住了。你能用这些信息更新你的答案吗?可能对将来的用户有用。下次可能要使用字符串而不是正则表达式。因为/delete/
匹配任何包含delete
的单词,而不仅仅是单词delete
/^delete$/
与“delete”
相同。
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() );
}