2016-04-24 12 views
1

私はマングースについて別の質問があります。今回は、私の文書内の他の配列の中の配列要素を更新したいと思います。それはstrucutureは私がnameによって_id、選択したプロジェクトで文書を検索し、tasks、アレイ内の新しいタスクを追加するこのMongooseの別の配列にネストされた配列に要素を追加する方法は?

{ 
    "_id" : ObjectId("5702e0c732faf57c7bb9ebe9"), 
    "email" : "[email protected]", 
    "projects" : [ 
     { 
      "name" : "inbox", 
      "title" : "Inbox", 
      "tasks" : [ 
       { 
        "id" : "1", 
        "text" : "First task", 
        "labels" : [ 
         "home", 
         "phone" 
        ], 
        "dueDate" : "2016-03-18T11:10:00", 
        "created" : "2016-03-10T10:10:00", 
        "completed" : false 
       } 
      ] 
     }, 
     { 
      "name" : "work", 
      "title" : "Work", 
      "tasks" : [ 
       { 
        "id" : "4", 
        "text" : "Fourth", 
        "labels" : [ 
         "home", 
         "phone" 
        ], 
        "dueDate" : "2016-03-18T11:10:00", 
        "created" : "2016-03-10T10:10:00", 
        "completed" : false 
       } 
      ] 
     } 
    ] 
} 

のように見えるのです。これを行う最善の方法は何ですか?今の私は、私が正しい場所

User.findOne(
    { _id: Mongoose.Types.ObjectId(userId), 'projects.name': data.project }, 
    (err, data) => { 
    if (err) { throw err; } 

    console.log(data); 
    } 
); 

を照会していますかどうかを確認するためにfindOneを使用しようとしました。しかし、それは、アレイ内のすべてのプロジェクトを返し、私は私が探しているプロジェクトを選択し、tasksに要素を追加する方法がわかりませんアレイ。私は

User.update(
    { _id: Mongoose.Types.ObjectId(userId), 'projects.name': data.project }, 
    { $push: { 'projects.$.tasks': data.task } }, 
    (err, data) => { 
    if (err) { throw err; } 

    return reply('success'); 
    } 
); 

答えて

3

ソリューションがアップデートでこの

User.update({_id:ObjectId(userId),'projects.name': data.project},{$push:{'projects.$.tasks':{yourTaskObject}}}) 

$を試してみた

1

は、親配列

の位置を取得し、位置演算子として機能します