[MONGODB] 하나의 문에서 여러 몽고 업데이트 연산자?
MONGODB하나의 문에서 여러 몽고 업데이트 연산자?
나는 $ pushAll 하나의 문에서 $ INC는 결합 할 수 있습니까?
전에이 잘 작동 결합 :
db.createCollection("test");
db.test.insert({"name" : "albert", "bugs" : []});
db.test.update({"name":"albert"},
{"$pushAll" : {"bugs" : [{"name":"bug1", "count":1}]}});
db.test.update({"name":"albert"},
{"$inc" : {"bugs.0.count" : 1}});
db.test.update({"name":"albert"},
{"$pushAll" : {"bugs" : [{"name":"bug2", "count":1}]}});
하지만 난 이런 식으로 결합 할 때 :
db.createCollection("test");
db.test.insert({"name" : "albert", "bugs" : []});
db.test.update({"name":"albert"},
{"$pushAll" : {"bugs" : [{"name":"bug1", "count":1}]}});
db.test.update({"name":"albert"},
{
"$pushAll" : {"bugs" : [{"name":"bug2", "count":1}]},
"$inc" : {"bugs.0.count" : 1}
}
);
이 오류가 발생합니다 :
have conflicting mods in update
나는이 작업을 수행 할 수 있을까, 또한, 난 그냥 pushAll 및 INC 이상을 결합 상상,하지만 난이 지원되지 않거나 있지 않다 있는지 여부?
나는 배열의 다른 요소에 여러 $의 INC를했는데, 그것은 제대로 수행하지 않는 있지만 (왜 작동이 doensnt 잘 작동하고 어떤 일을 명확히하기 위해 아래의 대답에서 인용. 두 필드를 증가하는 올바른 방법은 그대로 다음> dB. test.update ({ "이름": "알버트"}, { "$ INC": { "bugs.0.count": 1, "bugs.1.count": 1}}) :
db.test.update({"name":"albert"},
{
"$inc" : {"bugs.0.count" : 1},
"$inc" : {"bugs.1.count" : 1}
}
);
그리고 $ 세트와 배열도 작동의 다른 요소에 $ INC의 조합 :
db.test.update({"name":"albert"},
{
"$set" : {"bugs.0.test" : {"name" : "haha"}},
"$inc" : {"bugs.0.count" : 1},
"$inc" : {"bugs.1.count" : 1}
}
);
그러나 $ 푸시 또는 $ pushAll와 이들의 결합, 모든 오류를 이동합니다.
그래서, 내 현재의 결론은, 그것은 문제입니다 동일한 어레이 내에서 여러 요소에 여러 작업에 대한 것이 아니라 배열을 변경할 수 있습니다 $ 푸시 또는 $ pushAll으로 이러한 작업을 결합하는 것은 문제이다.
해결법
-
==============================
1.여러 업데이트 한 해당 업데이트가 충돌하지 않는 (따라서 오류 "업데이트에서 충돌 개조가"), 같은 문서에 수행 될 수있다.
여러 업데이트 한 해당 업데이트가 충돌하지 않는 (따라서 오류 "업데이트에서 충돌 개조가"), 같은 문서에 수행 될 수있다.
{ "버그": [{ "이름": "bug1", "계산": 1}]}와 "$ INC": { "bugs.0.count": 1} 모두를 시도하는 "$ 푸시"때문에 문서 (즉, "버그"배열), 충돌들은 동일한 부분을 수정.
각 문서의 다른 부분이 영향을 미치는 경우 여러 업데이트가 결합 될 수있다 :
예를 들어 :
> db.test.drop() true > db.test.save({ "_id" : 1, "name" : "albert", "bugs" : [ ] }) > db.test.update({"name":"albert"}, {"$pushAll" : {"bugs" : [{"name":"bug1", "count":1}]}, "$inc" : {"increment" : 1}, $set:{"note":"Here is another field."}}) > db.test.find() { "_id" : 1, "bugs" : [ { "name" : "bug1", "count" : 1 } ], "increment" : 1, "name" : "albert", "note" : "Here is another field." } >
이 업데이트는 세 가지 다른 작업 ($ pushAll, $ INC, 및 $ 설정)에 들어있는 각 작업 문서의 다른 부분에 영향을하기 때문에, 성공적으로 완료 할 수 있었다.
나는 이것이 당신이해야 할 바라고 정확히하지 실현, 그러나 희망은 어떻게 업데이트 작업의 이해보다 약간의를 제공 할 것입니다, 아마 당신의 업데이트 및 / 또는 문서가 그 기능을 수행하기 위해 재구성 될 수있는 방법을 몇 가지 아이디어를 제공하여 응용 프로그램이 필요합니다. 행운을 빕니다.
from https://stackoverflow.com/questions/9823140/multiple-mongo-update-operator-in-a-single-statement by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 집계 프레임 워크 | 여러 값을 통해 그룹? (0) | 2019.12.14 |
---|---|
[MONGODB] MongoDB의에서 업데이트 문서의 수를 제한하는 방법 (0) | 2019.12.14 |
[MONGODB] MongoDB를 - DBREF이 필요하다? (0) | 2019.12.14 |
[MONGODB] Node.js를 - 여러 비동기 호출에 대한 대기 (0) | 2019.12.14 |
[MONGODB] 몽고에서는 DBRef으로 조회 $합니다 (0) | 2019.12.14 |