[MONGODB] MongoDB의에서 정확한 요소 배열에서 업데이트 필드
MONGODBMongoDB의에서 정확한 요소 배열에서 업데이트 필드
나는이 같은 구조 문서를 가지고 :
{
_id:"43434",
heroes : [
{ nickname : "test", items : ["", "", ""] },
{ nickname : "test2", items : ["", "", ""] },
]
}
나는 별명 "테스트"와 배열 영웅에 포함 된 개체의 항목 배열의 두 번째 요소를 설정 $ 수 있습니까?
결과:
{
_id:"43434",
heroes : [
{ nickname : "test", items : ["", "new_value", ""] }, // modified here
{ nickname : "test2", items : ["", "", ""] },
]
}
해결법
-
==============================
1.MongoDB를의 위치 연산자와 간단하게 업데이트 할 항목의 숫자 인덱스를 사용 : 당신은이 개념을 활용해야합니다.
MongoDB를의 위치 연산자와 간단하게 업데이트 할 항목의 숫자 인덱스를 사용 : 당신은이 개념을 활용해야합니다.
위치 연산자를 사용하면 다음과 같은 조건을 사용할 수 있습니다 :
{"heros.nickname": "test"}
다음과 같이 발견 배열 항목 참조 :
{"heros.$ // <- the dollar represents the first matching array key index
당신이 "항목"의 2 차 배열 항목을 업데이트 할, 그리고 배열의 키는 인덱스 0 인 것처럼 - 그 키 1입니다.
그래서:
> db.denis.insert({_id:"43434", heros : [{ nickname : "test", items : ["", "", ""] }, { nickname : "test2", items : ["", "", ""] }]}); > db.denis.update( {"heros.nickname": "test"}, {$set: { "heros.$.items.1": "new_value" }} ) > db.denis.find() { "_id" : "43434", "heros" : [ {"nickname" : "test", "items" : ["", "new_value", "" ]}, {"nickname" : "test2", "items" : ["", "", "" ]} ] }
-
==============================
2.
db.collection.update( { heroes:{$elemMatch:{ "nickname" : "test"}}}, { $push: { 'heroes.$.items': { $each: ["new_value" ], $position: 1 } } } )
-
==============================
3.이 솔루션은 잘 작동합니다. 그냥 한 지점을 추가 할 수 있습니다. 여기서 구조이다. 나는 OrderItemId가 'YYY'및 업데이트를 찾을 필요가있다. 조건에서 쿼리 필드가 아래와 같이 배열 인 경우 "OrderItems.OrderItemId는"배열입니다. 당신은 쿼리에서 작업으로 "OrderItems.OrderItemId [0]"사용할 수 없습니다. 대신 비교 "OrderItems.OrderItemId"를 사용해야합니다. 그렇지 않으면 하나와 일치 할 수 없다.
이 솔루션은 잘 작동합니다. 그냥 한 지점을 추가 할 수 있습니다. 여기서 구조이다. 나는 OrderItemId가 'YYY'및 업데이트를 찾을 필요가있다. 조건에서 쿼리 필드가 아래와 같이 배열 인 경우 "OrderItems.OrderItemId는"배열입니다. 당신은 쿼리에서 작업으로 "OrderItems.OrderItemId [0]"사용할 수 없습니다. 대신 비교 "OrderItems.OrderItemId"를 사용해야합니다. 그렇지 않으면 하나와 일치 할 수 없다.
{ _id: 'orderid', OrderItems: [ { OrderItemId: ['xxxx'], ... }, { OrderItemId: ['yyyy'], ...}, ] }
result = await collection.updateOne( { _id: orderId, "OrderItems.OrderItemId": [orderItemId] }, { $set: { "OrderItems.$.imgUrl": imgUrl[0], "OrderItems.$.category": category } }, { upsert: false }, ) console.log(' (result.modifiedCount) ', result.modifiedCount) console.log(' (result.matchedCount) ', result.matchedCount)
from https://stackoverflow.com/questions/10432677/update-field-in-exact-element-array-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 어떻게하여 MongoDB에서 배열 요소를 제거하려면? (0) | 2019.11.30 |
---|---|
[MONGODB] 특정 값을 포함하는 배열 문서를 찾기 (0) | 2019.11.30 |
[MONGODB] MongoDB를이 : one..how에 여러 컬렉션에서 데이터를 결합? (0) | 2019.11.30 |
[MONGODB] MongoDB를 $ 중첩 된 배열에 밀어 (0) | 2019.11.30 |
[MONGODB] 어떻게 MongoDB의 수집에 대한 변경 사항을 듣는? (0) | 2019.11.30 |