-1

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

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

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

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

所以我正在运行一个地图函数来获取地图中的所有 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 
               })

但我不确定如何做到这一点,或者是否有可能。

4

1 回答 1

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 必须保持不变。

于 2015-04-20T19:57:36.317 回答