2017-01-27 70 views
0

我的應用程序是一個API,建立與Expressjs /貓鼬......更新另一個子文檔內的子文檔

我有以下的架構,而我試圖更新子文檔的子文檔。實質上是「phones」數組,它是「contacts」數組的一部分,它是「profile」對象的子文檔。

我想了解如何遍歷對象樹並進行更新。

下面是我使用的示例模式:

{ 
    "_id": "588b5a7d6d76c815ff6b9e7a", 
    "name": "Joe Smith", 
    "owner_id": "588b5a5d6d76c815ff6b9e79", 
    "__v": 1, 
    "contacts": [ 
     { 
     "contact_name": "Jim Parks", 
     "_id": "588b5abd6d76c815ff6b9e7c", 
     "phones": [] 
     }, 
     { 
     "contact_name": "Perry Mips", 
     "_id": "588b5abd6d76c815ff6b31de", 
     "phones": [] 
     } 
    ] 
} 

我試圖用拳頭做了芬頓(),將通過OWNERID備案縮小搜索範圍。然後按以下方式更新「contacts」數組:

router.route('/:ownerId/addphone/:contactId') 
.put(function(req, res) { 

    console.log('Req Body: ', req.body); 
    console.log('Req: ', req.params); 
    Profile.findOne({owner_id:req.params.ownerId}, function(err, profile) { 

    var contacts = req.body.contacts; 
    console.log('contacts', contacts); 

    profile.contacts.id(req.body._id) = contacts; 
    profile.save(); 

    }); 
}); 

但是,這似乎並不奏效。

任何幫助將是偉大的!

回答

0

你可以試試這個:

router.route('/:ownerId/addphone/:contactId') 
.put(function(req, res) { 

    console.log('Req Body: ', req.body); 
    console.log('Req: ', req.params); 
    Profile.update({owner_id:req.params.ownerId,"contacts._id":req.body._id},{phones:req.body.contacts}).exec(function(err, profile) { 

    console.log(err) 
    console.log(profile) 

    }); 
}); 

我希望這可以幫助你!。