2012-02-22 12 views
24

authorsアレイ内のサブ文書を次のようにターゲットにして更新するにはどうすればよいですか?mongodbのサブ文書を更新していますか?

collection.update({'_id': "4f44af6a024342300e000001"}, {$set: { 'authors.?' }}) 

文書:

{ 
    _id:  "4f44af6a024342300e000001", 
    title: "A book", 
    created: "2012-02-22T14:12:51.305Z" 
    authors: [{"_id":"4f44af6a024342300e000002"}] 
} 

答えて

37

次のように埋め込まれた文書の実際の位置を指定する:

// update _id field of first author  
collection.update({'_id': "4f44af6a024342300e000001"}, 
        {$set: { 'authors.0._id': "1" }}) 

またはpositional operator経由:

// update _id field of first matched by _id author  
collection.update({'_id': "4f44af6a024342300e000001", 
        //you should specify query for embedded document 
        'authors._id' : "4f44af6a024342300e000002" }, 
    // you can update only one nested document matched by query     
        {$set: { 'authors.$._id': "1" }}) 
+2

すべて更新する方法がありますネストされたドキュメントドキュメント? – BlaShadow

+0

コレクション内の最初に一致するドキュメント以上のものを更新する場合は、collection.update – dev

+0

の3番目のパラメータとして{multi:true}を追加してください。終了しないと、新しいサブドキュメントが挿入されます? – Pila

関連する問題