如何使用变量更新mongoDB中的特定数组索引

时间:2017-02-22 00:56:25

标签: mongodb

我正在创建两个集合,一个是暂时创建的,然后“填充”到主集合中的另一个文档中。

我正在努力理解如何以类似于下面的方式更新数组的特定索引。

function stuffDepartmentsIntoLocations() {
    var ops = [];

    db.HR.find().forEach(function(country) 
        {
            for(var i=0;i < country.location.length; i++) {
                db.tempDEPTS.find({"LOCATION_ID":location.LOCATION_ID}).forEach(function(dept)
                    {
                        ops.push(
                            {
                                    "updateOne": 
                                {
                                        "filter": {"_id": country._id },
                                        "update\": {"$push": {"location[i].department":dept}}
                                        }
                                } 
                            );
                        if ( ops.length == 1000 ) {
                                db.HR.bulkWrite(ops,{ "ordered": false });
                                ops = [];
                        }
                    }               
                );          
             }      
      }
    );

   if ( ops.length > 0 ) {
     db.HR.bulkWrite(ops,{ "ordered": false });
   }

 return true;
}"

这似乎不起作用:

"update": {"$push": {"location[i].department":dept}}

错误如下:

  

{“serverUsed”:“127.0.0.1:27017”,“retval”:true,“ok”:1.0} {   “serverUsed”:“127.0.0.1:27017”,“ok”:0.0,“errmsg”:   “ReferenceError:未定义位置   :\ nstuffDepartmentsIntoLocations /&LT; @:1:195个\ nDBQuery.prototype.forEach@src/mongo/shell/query.js:501:1个\ nstuffDepartmentsIntoLocations @:1:74 \ n”个   ,“code”:139,“codeName”:“JSInterpreterFailure”} [统计]   断开

人力资源收集文件如下:

enter image description here

我想添加的临时集合中的部门文档如下:

enter image description here

1 个答案:

答案 0 :(得分:0)

啊啊......刚看到它,我曾经有一个forEach但是把它改成了一个索引数组:

此:

db.tempDEPTS.find({"LOCATION_ID":location.LOCATION_ID}).forEach(function(dept)

应该是这样的:

db.tempDEPTS.find({"LOCATION_ID":country.location[i].LOCATION_ID}).forEach(function(dept)

现在我的部门根据location_id填入了位置文档:

enter image description here

必须是更好的方法,但似乎有效。