Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从数组MongoDB对象中删除字符串_Mongodb - Fatal编程技术网

从数组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() );
}