programing

MongoDB 특정 배열 값 바꾸기

padding 2023. 6. 22. 21:35
반응형

MongoDB 특정 배열 값 바꾸기

MongoDB에는 다양한 언어가 포함된 영화 모음집이 있습니다.
languages: [0:USA, 1: German, 2: French, ...etc]

배열 값은 특정 순서가 아닙니다.

이제 특정 값을 기준으로 배열 값을 업데이트하려면 어떻게 해야 합니까?모든 "French"를 업데이트하고 전체 컬렉션에 대해 "Francais"로 바꾸려고 합니다.내가 어떻게 그럴 수 있을까?

위치 연산자를 사용하여 다음 구성 요소를 식별합니다.languages배열에서 위치를 명시적으로 지정하지 않고 업데이트할 배열. 즉, 위치를 미리 알고 요소를 다음과 같이 업데이트하는 대신:

db.movies.updateMany(
    { "languages": "French" }, 
    { "$set": { "languages.2": "Francais" } }
)

연산자를 다음과 같이 사용할 수 있습니다.

db.movies.updateMany(
    { "languages": "French" }, 
    { "$set": { "languages.$": "Francais" } }
)

또는 업데이트 작업에 집계 파이프라인을 사용합니다.

db.movies.updateMany(
    { "languages": "French" }, 
    [
        { "$set": { 
            "languages": {
                "$map": {
                    "input": "$languages",
                    "in": {
                        "$cond": [
                            { "$eq": ["$$this", "French"] }, 
                            "Francais", 
                            "$$this"
                        ]
                    }
                }
            }
        } }
    ]
)

배열에 다음과 같은 중복 항목이 있는 경우:

"languages" : [ 
    "USA", 
    "German", 
    "French",
    "French"
]

다음 구문을 사용하여 MongoDB v3.5.12(문서)로 시작하는 모든 항목을 바꿀 수 있습니다.

db.movies.updateMany(
    { "languages": "French" },
    { "$set": { "languages.$[filter]": "Francais" } },
    { "arrayFilters": [ { "filter": "French" } ] }
)

엄밀하게 말하면, 그.{ "languages": "French" }필터가 필요하지 않습니다.그러나 "언어"가 있을 경우에 대비하여 "언어"에 대한 색인을 활용함으로써 속도를 높일 것입니다.필요/원하지 않을 경우 간단한 절차를 통과합니다.{}값은 첫 번째 매개 변수도 작동합니다.

언급URL : https://stackoverflow.com/questions/48545448/mongodb-replace-specific-array-values

반응형