[MONGODB] MongoDB의에서 배열의 내부 배열 내부의 업데이트 포함 된 개체
MONGODBMongoDB의에서 배열의 내부 배열 내부의 업데이트 포함 된 개체
나는 문서 등이있다
{
id : 100,
heros:[
{
nickname : "test",
spells : [
{spell_id : 61, level : 1},
{spell_id : 1, level : 2}
]
}
]
}
난 안 $는 마법의 수준을 설정할 수 있습니다 : 3 spell_id과 : 1 개 내부의 주문을 별명을 가진 내부 영웅 "이 시험은 내가이 쿼리를 시도했습니다. :
db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1},
{$set:{"heros.spells.$.level":3}});
내가 볼 오류입니다
해결법
-
==============================
1.당신은 단일 레벨 배열의 $ 위치 연산자를 사용할 수 있습니다. 귀하의 경우에는, 당신은 중첩 된 배열 (영웅 배열이며, 각 영웅은 마법 배열을 가지고있는 것을 이내)이있다.
당신은 단일 레벨 배열의 $ 위치 연산자를 사용할 수 있습니다. 귀하의 경우에는, 당신은 중첩 된 배열 (영웅 배열이며, 각 영웅은 마법 배열을 가지고있는 것을 이내)이있다.
당신이 배열의 인덱스를 알고있는 경우처럼, 업데이 트를 수행 할 때, 당신은 명시 적으로 인덱스를 사용할 수 있습니다 :
> db.test.update({"heros.nickname":"test", "heros.spells.spell_id":1}, {$set:{"heros.0.spells.1.level":3}});
-
==============================
2.이 같은 시도 :
이 같은 시도 :
db.test.find({"heros.nickname":"test"}).forEach(function(x) { bool match = false; for (i=0 ; i< x.heros[0].spells.length ; i++) { if (x.heros[0].spells[i].spell_id == 1) { x.heros[0].spells[i].level = 3; match = true; } } if (match === true) db.test.update( { id: x.id }, x ); });
분명히 누군가가 업데이트 절 내부 기능을 넣을 수있는 기능을 추가 할 수있는 티켓을 열었지만되지 않았습니다 아직 해결 : https://jira.mongodb.org/browse/SERVER-458
from https://stackoverflow.com/questions/10465849/update-embedded-object-inside-array-inside-array-in-mongodb by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 그 배열 필드 주어진 배열의 적어도 N 개의 요소를 포함하는 문서를 찾을 (0) | 2019.12.19 |
---|---|
[MONGODB] 변환 ISO 날짜에 타임 스탬프에 몽고 쿼리 (0) | 2019.12.19 |
[MONGODB] MongoDB의에서 필드의 실제의 형태를 돌려줍니다 (0) | 2019.12.18 |
[MONGODB] MongoDB를이 - 권한 소켓 거부 : /tmp/mongodb-27017.sock를 (0) | 2019.12.18 |
[MONGODB] MongoDB의에서 당신은 어떻게 중첩 된 값 / 포함 된 문서를 업데이트 $ 세트를 사용합니까? (0) | 2019.12.18 |