[MONGODB] MongoDB를 : 어떻게 배열 내의 인덱스에 의해 참조 배열에서 하나의 하위 요소를 업데이트하려면 어떻게해야합니까?
MONGODBMongoDB를 : 어떻게 배열 내의 인덱스에 의해 참조 배열에서 하나의 하위 요소를 업데이트하려면 어떻게해야합니까?
나는 MongoDB의 문서 배열에 포함 된 하나의 하위 요소를 업데이트하기 위해 노력하고있어. 나는 (내가 고유 식별자 될 것입니다 보장 할 수있는 필드가없는 배열 내 요소)의 배열 인덱스를 사용하여 필드를 참조 할. 이 쉽게 할 수 있어야한다,하지만 난 구문을 알아낼 수 없습니다 것 같다.
여기에 내가 의사 JSON에서 수행 할 작업입니다.
전에:
{
_id : ...,
other_stuff ... ,
my_array : [
{ ... old content A ... },
{ ... old content B ... },
{ ... old content C ... }
]
}
후:
{
_id : ...,
other_stuff ... ,
my_array : [
{ ... old content A ... },
{ ... NEW content B ... },
{ ... old content C ... }
]
}
이 같은해야 쿼리 것 같다 :
//pseudocode
db.my_collection.update(
{_id: ObjectId(document_id), my_array.1 : 1 },
{my_array.$.content: NEW content B }
)
하지만이 작동하지 않습니다. 나는 (예를 들어, 등, $ 슬라이스를 사용하는) 방법은 너무 오래 MongoDB의 워드 프로세서를 검색 및 구문에 다른 변화를 시도 썼다. 나는 MongoDB를에 업데이트 이런 종류의 작업을 수행하는 방법에 대한 명확한 설명을 찾을 수 없습니다.
해결법
-
==============================
1.예상대로 당신이 방법을 알고 나면, 쿼리는 간단합니다. 다음은 파이썬의 구문은 다음과 같습니다
예상대로 당신이 방법을 알고 나면, 쿼리는 간단합니다. 다음은 파이썬의 구문은 다음과 같습니다
db["my_collection"].update( { "_id": ObjectId(document_id) }, { "$set": { 'documents.'+str(doc_index)+'.content' : new_content_B}} )
-
==============================
2.몽고 셸에서 인덱스 (예를 들면 1)에 의해 참조되는 배열 요소의 업데이트는 직접 인덱스 값을 표시함으로써 수행 될 수있다
몽고 셸에서 인덱스 (예를 들면 1)에 의해 참조되는 배열 요소의 업데이트는 직접 인덱스 값을 표시함으로써 수행 될 수있다
db.my_collection.update( {_id : "document_id"}, {$set : {"my_array.1.content" : "New content B"}} )
-
==============================
3.몽고 스타일에서, '$'위치 연산자를 사용하여. 자세한 내용은이 링크를 확인하세요.
몽고 스타일에서, '$'위치 연산자를 사용하여. 자세한 내용은이 링크를 확인하세요.
db.my_collection.update( {_id: ObjectId(document_id), my_array.1 : 1 }, { $set: { "my_array.$.content" : "NEW content B" } } )
-
==============================
4.
db.my_collection.update( {_id: ObjectId(document_id), my_array : { ... old content A ... } }, { $set: { "my_array.$.content" : "NEW content B" } } )
-
==============================
5.오래된 콘텐츠 B의 키 예를 당 "값"인 경우, 배열의 요소의 인덱스를 통과하여 MongoDB의 updateOne 기능을 사용할 수 있습니다 :
오래된 콘텐츠 B의 키 예를 당 "값"인 경우, 배열의 요소의 인덱스를 통과하여 MongoDB의 updateOne 기능을 사용할 수 있습니다 :
[ ... "value" : "old content A" "value" : "old content B" "value" : "old content C" ... ]
명령은 다음과 같이해야합니다 :
db.collection.updateOne({"_id" : "...,"},{$set: {"my_array.1.value": "NEW content B"}})
from https://stackoverflow.com/questions/11372065/mongodb-how-do-i-update-a-single-subelement-in-an-array-referenced-by-the-inde by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를이 - 콜렉션에서 그룹 당 최대 속성을 가진 문서를 얻을 수 (0) | 2019.12.03 |
---|---|
[MONGODB] 빠른지도에 비해 MongoDB를 집계 프레임 워크인가 / 감소? (0) | 2019.12.03 |
[MONGODB] 에 '또는'조건 MongoDB의 쿼리 (0) | 2019.12.03 |
[MONGODB] 몽구스, 발견과 특정 필드를 선택 (0) | 2019.12.03 |
[MONGODB] MongoDB의 두 컬렉션을 병합 (0) | 2019.12.03 |