2016-12-29 5 views
0

私はドキュメントを次のように仮定します。

{ 
    id: 1, 
    name: alex, 
    age: 39, 
    surname: felix 
    address: [ 
    { 
    type: "home" 
    street: "blabla" 
    } 
    ] 
} 

私はこのクエリを次のように記述しました。

db.collection.update({id: 1 , adress.type: "home"} , { $set : {adress: { street: "test"}}); 

{ 
    id: 1, 
    adress: [ 
     street: test 
    ] 
} 

しかし、私はドキュメントの一部を設定したいだけで、通りの名前を変更したいだけですが、このクエリはドキュメントを上書きします。

mongodbで文書の部分部分を編集するには、updateを使用しますか?

答えて

1

あなたは、位置$オペレータ

db.collection.update( 
    {id: 1 , adress.type: "home"}, 
    { $set: { "adress.$.street": "test" } } 
) 

!注意を使用して行うことができる配列の位置にアイテムを更新Docs

+0

はい、これは応答ですエル。しかし、なぜ? {address:{street: "test"}} "address。$。street" "は論理全体を変更します。 – mmu36478

+0

配列なので、クエリに応じて適切なインデックス値を更新する必要があります。 –

0

からもっとこの

db.collection.update( 
    { id: 1, "address.type" : "home" } , 
    {$set : {"address.$.street" : "test"}} 
); 

読むを試すことができ、これをONE(1)のサブ文書が見つかった場合のみ動作します

関連する問題