[MONGODB] MongoDB의에서 중첩 된 배열을 업데이트
MONGODBMongoDB의에서 중첩 된 배열을 업데이트
나는 갱신, 이런 식으로 뭔가를해야한다는 객체의 2 수준 깊은 중첩 된 배열하여 MongoDB에서 문서를 가지고 :
{
id: 1,
items: [
{
id: 2,
blocks: [
{
id: 3
txt: 'hello'
}
]
}
]
}
한 레벨 만 깊이 배열가 있었다면 내가 유일한 옵션 I의 한이 와서 거기에 있지만 두 번째 수준에 대한 업데이트 객체에 대한 위치 연산자를 사용할 수있는 것은 다음과 같이 중첩 된 객체의 인덱스 위치 연산자를 사용하는 것입니다 :
db.objects.update({'items.id': 2}, {'$set': {'items.$.blocks.0.txt': 'hi'}})
이 방법은 작동하지만 내가 색인 100000 말을 보낼 수 있습니다 클라이언트에서 와야 웹 서비스 및 인덱스 번호를 짓고 있어요 때문에 나에게 위험한 것이가 null 값 100000 개 인덱스 배열을 만들 MongoDB를 강제 할 것이다.
내가 쿼리에서 사용하기 전에 인덱스가 범위 외에있는 경우 확인하는 개체의 ID 대신에 그것의 위치 또는 어쩌면 방법을 참조 할 수 있습니다와 같은 중첩 된 개체를 업데이트 할 수있는 다른 방법이 있습니까?
해결법
-
==============================
1.여기에 큰 문제는 당신은 몽고의 "addToSet"와 "푸시"작업에 활용해야합니까,입니까? 당신이 정말로 배열에 단지 개별 항목을 수정하려는 경우, 당신은 아마 객체로 이러한 배열을 구축해야한다.
여기에 큰 문제는 당신은 몽고의 "addToSet"와 "푸시"작업에 활용해야합니까,입니까? 당신이 정말로 배열에 단지 개별 항목을 수정하려는 경우, 당신은 아마 객체로 이러한 배열을 구축해야한다.
여기에 내가이 구조 할 방법은 다음과 같습니다
{ id: 1, items: { "2" : { "blocks" : { "3" : { txt : 'hello' } } }, "5" : { "blocks" : { "1" : { txt : 'foo'}, "2" : { txt : 'bar'} } } } }
JSON에있는이 기본적으로 변환 모든 것을 대신 배열의 객체. 당신은 $ 밀고 $ addToSet를 사용할 수있는 능력을 상실하지만 난이 쉽게 모든 것을하게 생각합니다. 예를 들어, 쿼리는 다음과 같을 것이다 :
db.objects.update가 ({ 'items.2은'{$가 존재 :} 사실}, { '$ 세트': { 'items.2.blocks.0.txt': '안녕하세요'}})
또한 나는 "ID를"덤프 한 것을 알 수 있습니다. 이 같은 중첩 일을있을 때 당신은 일반적으로 단순히 인덱스로 해당 번호를 사용하여 "ID"를 대체 할 수 있습니다. 은 "ID"개념은 이제 암시한다.
이 기능은 표현 업데이트 3.6에 추가되었습니다.
db.objects.update ({ID : 1}, {$ 세트 { '항목 $ [ITM] .blocks $ [BLK]이 .txt.. ""안녕하세요 "}}, {다 : 거짓을 arrayFilters : { 'itm.id'2}, { "blk.id ': 3}]})
-
==============================
2.사용중인 ID는 선형 수 있습니다 그것은 추가 필드 등 'max_idx'또는 이와 유사한 같은 곳에서 온있다. ID와 다음 업데이트에 대한이 수단 일 조회. UUID / ObjectId가 당신뿐만 아니라 CRUD를 분산 사용할 수 있도록합니다 IDS 사용할 수 있습니다.
사용중인 ID는 선형 수 있습니다 그것은 추가 필드 등 'max_idx'또는 이와 유사한 같은 곳에서 온있다. ID와 다음 업데이트에 대한이 수단 일 조회. UUID / ObjectId가 당신뿐만 아니라 CRUD를 분산 사용할 수 있도록합니다 IDS 사용할 수 있습니다.
from https://stackoverflow.com/questions/4121666/updating-nested-arrays-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 하지 덮어 쓰기 모델은 한 번 몽구스를 컴파일 할 수 (0) | 2019.12.04 |
---|---|
[MONGODB] 컬렉션의 속성을 매핑하기위한 감소 /지도 사용 (0) | 2019.12.04 |
[MONGODB] 기존의 모든 필드를 포함하고 문서에 새로운 필드를 추가 (0) | 2019.12.04 |
[MONGODB] MongoDB를 집계 방법 : 총 기록을 계산 얻을? (0) | 2019.12.04 |
[MONGODB] 어떻게 날짜 형식으로 텍스트에서 MongoDB를에 속성을 변환합니까? (0) | 2019.12.04 |