2016-09-06 190 views
0

我有以下的JSON:MongoDB的更新嵌套數組

{ 
"_id" : ObjectId("57ce1a55899bf934e59edd0d"), 
"project_name" : "Coupletones", 
"list_users" : [ 
    "testmail" 
], 
"iterations" : [ 
    { 
     "iteration_name" : "Iteration1", 
     "tasks" : [ ] 
    }, 
    { 
     "iteration_name" : "Iteration2", 
     "tasks" : [ ] 
    }, 
] 
} 

我希望能夠把事情成與迭代2.相關的任務陣列如何正確查詢並插入到正確的位置?這是我到目前爲止,但它總是插入與迭代1

var ans = collection_projects.update({ 
     "project_name" : project_name, 
     "list_users" : email, 
     "iterations.iteration_name": iteration_name, 
     }, 

     {$addToSet: {"iterations.$.tasks": { 
     task_name: task_name, 
     task_description : task_description, 
     task_assignee: task_assignee, 
     task_status : -1 } } } 
    ); 

相關的任務陣列我已經看到了這一點: MongoDB nested array query 但他只不過是想推到一個嵌套的數組。

+1

的[位置更新操作](https://docs.mongodb.com/manual/reference/operator/update/positional/)更新它發現在第一元件數組,如[Shumi Gupta](http://stackoverflow.com/users/6326976/shumi-gupta)回答的那樣,您需要在de find/condition中包含要更新的元素。一個重要的通知,位置更新更新第一個和第一個元素。如果您需要更新數組中的多個元素,您(此時)需要在客戶端進行更新。有這個願望的JIRA票 – HoefMeistert

回答

1

嘗試通過該方法

conditions = { 
    "_id": ObjectId"57ce1a55899bf934e59edd0d", 
    "iterations.iterations_name": "Iteration2" 
    }; 
updates = { 
    $push: { 
    "iterations.$.tasks": "success" 
    } 
}; 
options = { 
    upsert: true 
}; 
Model.update(conditions, updates, options, callback);