MongoDB基于.map()数组对象进行更新

时间:2015-04-20 19:44:21

标签: mongodb mongodb-update

所以问题是我在相关集合中不再存在的数组和数组中嵌套了对象。搜索到的集合(用户)看起来像

{
    "_id" : id,
    "locations" : [
            {
                    "_id" : id,
                    "name" : name
            }
    ] 
}

数组与(位置)相关的集合看起来像。

{
        "_id" : id,
        "name" : name, ..........
}

所以我正在运行一个map函数来获取地图中的所有id和name以将字段缩小到我想要使用的字段

    vals = db.locations.find({},{
       name : 1,_id : 1}).map(function(a){
          return {
            name : a.name,_id : a._id
          };
       })

接下来我想运行类似这样的更新

    db.users.update({
       "locations" : {
         "name" : {$nin : vals.name},
         "_id" : {$nin : vals._id}}}, { 
             "$pull" : { 
               "array" : {
                 "name" : {$nin : vals.name},
                 "_id" : {$nin : vals._id }}}},
                 { upsert: false, multi: true 
               })

但我不知道该怎么做或者甚至可能。

1 个答案:

答案 0 :(得分:0)

你应该做的是

vals = db.locations.find({},{name : 1,_id : 1}).map(function(a){return {name : a.name,_id : a._id};})

vals.forEach(function(x){
    db.locations.update({ _id: x._id, ...});
});

但是_id必须保持不变。