2016-04-28 63 views
0

我有一個名爲「客戶」下面的文件,其中包括ID,名稱和項目名單(對象數組):更新對象,而重組Mongo的數據庫

{ 
    "_id": { 
     "$oid": "572225d997bb651819f379f7" 
    }, 
    "name": "ppg", 
    "projects": [ 
     { 
      "name": "aaa", 
      "job_description": "", 
      "projectID": 20 
     }, 
     { 
      "name": "bbbb", 
      "job_description": "", 
      "projectID": 21 
     } 
    ] 
} 

我會要更新項目的「job_description」給定「專案編號」是這樣的:

module.exports.saveJobDesc = function(client, idOfProject, textProvided) { 
    db.clients.update({ name: client}, 
    { $set: {'projects.0.job_description': textProvided }}); 
}; 

,而不是硬編碼索引號「0」陣我想找到使用「專案編號」具體項目,而是。有沒有辦法在不改變收集和/或文件結構的情況下實現這一目標?

+0

如何使用'findOne'獲取客戶端對象,然後手動迭代他的項目? –

回答

0

您不能在單次更新操作中更新多個數組元素,而是可以逐個更新,這需要花費時間取決於數組中元素的數量和集合中此類文檔的數量。看到New operator to update all matching items in an array

db.test2.find().forEach(function(doc) { 
    var projects = doc.projects; 
    for(var i=0;i<projects.length;i++){ 
     var project = projects[i]; 
     if(project.projectID == 20){ 
      var field = "projects."+i+".job_description"; 
      var query = {}; 
      query[field] = "textasdsd"; 
      db.test2.update({ _id: doc._id},{ $set:query}); 
     } 
} 
}) 
1

如果您想更新 「job_description」,其中name = 「PPG」 和PROJECT_ID = 20,那麼你可以使用下面蒙戈查詢: -

db.clients.update({ "name":"ppg","projects.projectID":20 },{$set: {"projects.$.job_description": "abcd"}})

請讓我知道如果還有其他東西需要