2017-01-27 4 views
0

私のアプリは、私がサブドキュメントのサブドキュメントを更新しようとしている以下のスキーマを、持っている...別のサブドキュメント内のサブ文書を更新

API Expressjs /マングースでビルドです。本質的には、 "contacts"配列の一部である "phones"配列。これは "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を渡すことで、検索を絞り込む拳する:ここで

は、私が使用している例スキーマです。次に、「連絡先」配列を次のように更新します。

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) 

    }); 
}); 

を私はこれがあなたの役に立てば幸い!!。

関連する問題