2017-11-06 7 views
0

今はmongoosesを使ってサブ文書をプル&プルして、そのサブ文書の詳細フィールドの内容をサブ文書の_idで変更します。配列内のサブ文書を更新したい

{ 
    subDocument: [{ 
     _id: ObjectId('123'), 
     detail: 'I want update this part'   
    }] 
} 

以下のように$ setメソッドを使用しようとしましたが、期待通りに動作しませんでした。

Model.findByIdAndUpdate(uid, { $Set: {subDocument: {_id: _id}}}); 

以下のようなfor文を見ると、パフォーマンスに悪影響が出る可能性があります。だから私はこの方法を避けたい。

実装可能なmongodbクエリを教えてもらえますか?

そして、上記のfor(;;)ステートメントを使用する方がmongodbのクエリを使用して検索するよりも良いのですか?

+0

投稿のスキーマ.... – wrangler

答えて

1

これは動作するはずです:

Model.findOneAndUpdate({"subdocument._id": uid}, 
     { 
      $set: { 
       "subdocument.$.detail ": "detail here" 
      } 
     }, 
     ).exec(function(err, doc) { 
       //code 
     }); 
1

をidでサブドキュメントを見つけるには、私はこのようなものを使用しています:

var subDocument = data.subDocument.id(subDocumentId); 
if (subDocument) { 
    // Do some stuff 
} 
else { 
    // No subDocument found 
} 

はそれがお役に立てば幸いです。

関連する問題