从数组MongoDB对象中删除字符串

时间:2014-09-08 16:40:54

标签: mongodb

我有像我的收藏品中的对象:

{
   "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 值?

1 个答案:

答案 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() );
}