반응형
MongoDB - 중첩 배열의 개체 업데이트
{
"_id": "xPBc4By8FemDwTPqH",
"u": {
"_id": "6PoZawHZcQz4Gwzcv",
"username": "michael"
},
"friends": [
{
"u": {
"_id": "eGqDjAjjtYADbuSnn",
"username": "michael",
"name": "michael"
}
},
{
"u": {
"_id": "k4gKCGwYryXDMMHvs",
"username": "joyce",
"name": "joyce"
}
}
]
}
"friends.u.username"의 이름을 업데이트하고 싶습니다: "michael"의 이름은 "안녕하세요"입니다. 어떻게 해야 하는지요.
연산자를 업데이트의 위치 연산자와 함께 적용하여 다음을 변경합니다.name
들판.
위치 연산자는 배열에서 요소의 위치를 명시적으로 지정하지 않고 업데이트할 배열에서 올바른 요소를 식별하므로 최종 업데이트 문은 다음과 같이 표시됩니다.
db.collection.update(
{ "friends.u.username": "michael" },
{ "$set": { "friends.$.u.name": "hello" } }
)
둘 이상의 요소가 필터와 일치할 때 배열의 여러 요소를 업데이트하려면 옵션과 함께 구문을 사용할 수 있습니다.다음은 "친구" 배열에서 일치하는 모든 요소를 업데이트합니다.
db.collection.update(
{ "friends.u.username": "michael" },
{ "$set": { "friends.$[elem].u.name": "hello" } },
{
"arrayFilters": [{ "elem.u.username": "michael" }],
"multi": true
}
)
그$[elem]
구문은 옵션의 지정된 필터와 일치하는 배열 요소를 식별합니다.그multi: true
선택사항이 추가되어 일치하는 모든 문서를 업데이트할 수 있습니다.
$set 연산자를 사용할 수 있습니다.
> db.test.update({"friends.u._id":"eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
아래는 테스트한 대로 잘 작동합니다.
먼저 배열의 현재 값을 확인합니다.
db.test.findOne({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{"friends.u.name":1})
이제 update 명령을 실행합니다.
db.test.update({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{$set:{"friends.$.u.name":"hello"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
이제 결과를 다시 확인하여 업데이트 값의 유효성을 확인합니다.
db.test.findOne({"friends.u.id" : "eGqDjAjjtYADbuSnn"},{"friends.u.name":1})
이게 도움이 되길 바랍니다.
만약 당신이 파이썬을 사용하고 있다면, 나는 새로운 업데이트를 생성하기 위해 이 함수를 만들었습니다.
def generate_set_to_update_document(field: str, changes: dict) -> dict:
new_set = {}
for change in changes.keys():
new_set[f"{field}.$.{change}"] = changes[change]
return new_set
언급URL : https://stackoverflow.com/questions/34431435/mongodb-update-an-object-in-nested-array
반응형
'programing' 카테고리의 다른 글
UIScrollView를 콘텐츠에 맞게 자동 크기 조정하는 방법 (0) | 2023.05.08 |
---|---|
문자열이 0이고 비어 있는지 확인합니다. (0) | 2023.05.08 |
Python 3.4 비동기 코드를 테스트하는 방법은 무엇입니까? (0) | 2023.05.08 |
Azure 기능이 로컬 환경에서 실행되는지 확인하는 방법은 무엇입니까?Azure 함수에서 역할 환경이 작동하지 않습니다. (0) | 2023.04.28 |
System.지원되지 않음자산을 생성하려고 할 때 예외 발생 (0) | 2023.04.28 |