是否有可能在mongodb推送克隆现有的数组元素成为新数组对象的一部分?

时间:2018-03-21 07:12:52

标签: mongodb mongoose mongodb-query

到目前为止,我已设法在profile数组中添加一个新元素。我的目标是添加一个新的部门并从最近的个人资料中克隆现有的详细信息,例如职称。我无法弄清楚如何克隆它,我尝试job: "$profile.job", job: $profile.job或者甚至可能?

db.getCollection('employees').update(
  { "profile.depId": ObjectId('5aaa53f6207dc50c53ae4967'), "companyId": ObjectId('5aa6069648ac9b1668dfc2a0') },
  { "$push": { "profile":  { $each: [{ depName: "Test", job: "$profile.job" }], $position: 0  } } },
  { "multi": true }
)

或者我必须做两个查询来实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

我不认为MongoDB会允许您使用现有字段来创建新字段。相反,请尝试使用forEach获取光标并更新每个文档:

db.employees.find({  
   "profile.depId":ObjectId('5aaa53f6207dc50c53ae4967'),
   "companyId":ObjectId('5aa6069648ac9b1668dfc2a0')
}).snapshot().forEach( 
    function (empDoc){  
   db.employees.update(   {  
      _id:empDoc._id
   },
   {  
      "$push":{  
         "profile":{  
            $each:[  
               {  
                  depName:"Test",
                  job:empDoc.profile.jo"
               }
            ],
            $position:0
         }
      }
   }   );
});