복붙노트

[MONGODB] MongoDB의 임베디드 문서 속성을 업데이트

MONGODB

MongoDB의 임베디드 문서 속성을 업데이트

나는 모습이 좋아하는 문서가 :

{
    "_id": 3,
    "Slug": "slug",
    "Title": "title",
    "Authors": [
        {
            "Slug": "slug",
            "Name": "name"
        }
    ]
}

나는 Authors.Slug 기반으로하는 모든 Authors.Name를 업데이트합니다. 나는 이것을 시도했지만 작동하지 않았다 :

.update({"Authors.Slug":"slug"}, {$set: {"Authors.Name":"zzz"}});

어떻게 내가 여기 잘못 한거야?

해결법

  1. ==============================

    1.

    .update(Authors:{$elemMatch:{Slug:"slug"}}, {$set: {'Authors.$.Name':"zzz"}});
    
  2. ==============================

    2.당신은 배열 필터 업데이 트를 사용할 수 있습니다 : https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#positional-update-arrayfilters

    당신은 배열 필터 업데이 트를 사용할 수 있습니다 : https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#positional-update-arrayfilters

    이 같은 아마 뭔가 :

    yourcollection.update(
    {},
    {
        "$set": {
            "Authors.$[element].Name": "zzz"
        }
    },
    {
        "multi": true,
        "arrayFilters": [
             { "element.Slug": "slug" }
        ]
    }
    )
    

    시 : 그것은 Robo3T에서하지 작업 여기에 설명 된대로한다 : MongoDB를 3.6.0-RC3 배열 필터가 작동하지? 그러나 버전> = 3.6와 몽고 쉘에 시도 할 수 있습니다.

  3. ==============================

    3.Robo31을 시도 할 때 예, 록의 솔루션은 작동하고, P.S 노트는 정말 도움이됩니다 .. 우리 모두를 업데이트하려면 db.collection_name.update ({}, {$ 세트 : { "저자 $ [] 이름..": "ZZZ"}})

    Robo31을 시도 할 때 예, 록의 솔루션은 작동하고, P.S 노트는 정말 도움이됩니다 .. 우리 모두를 업데이트하려면 db.collection_name.update ({}, {$ 세트 : { "저자 $ [] 이름..": "ZZZ"}})

    우리는 배열에 객체를 일치하는 업데이트하려면 db.collection_name.update는 ({}, {$ 세트 { ". $ 저자 [I] .NAME": "ZZZ"}}, {arrayFilters [{ "i.Slug": "슬러그"}]})

    참조 : https://jira.mongodb.org/browse/SERVER-1243

  4. from https://stackoverflow.com/questions/6758339/updating-embedded-document-property-in-mongodb by cc-by-sa and MIT license