[MONGODB] 몽고와 동시에 풀과 addtoset
MONGODB몽고와 동시에 풀과 addtoset
나는 요소가이 단순화 할 수있는 컬렉션이 있습니다 :
태그 {[1, 5, 8}
곳이 배열에 적어도 하나 개의 요소가 될 것이며, 그들 모두는 달라야합니다. 나는 서로에 대한 하나 개의 태그를 대체 할 내가 문제가되지 않을 것이라고 생각했다. 그래서 나는 다음과 같은 쿼리를 함께했다 :
db.colll.update({
tags : 1
},{
$pull: { tags: 1 },
$addToSet: { tags: 2 }
}, {
multi: true
})
쿨, 그래서 내가하지 않아도 태그 (1)가 모든 요소를 발견 할 것이다, 그것을 제거하고 이미 거기 경우 다른 (2)를 추가합니다. 문제는 그 오류를 얻을 수 있습니다 :
기본적으로 어떤 I 동시에 풀과 addtoset을 할 수 없음을 의미합니다. 나는이 작업을 수행 할 수있는 다른 방법이 있습니까?
물론 나는 모든 요소 ID를 기억하고 태그를 제거하고 별도의 쿼리에 추가 할 수 있지만이 소리 좋은 작업을 수행 할 수 없습니다.
해결법
-
==============================
1.이 오류는 거의 동일한 업데이트 작업에 동일한 "경로"의 두 가지 행동 할 수 없기 때문에 그 의미 것입니다. 두 사업자는 당신이 그들이 생각하는대로 순차적으로 처리하지 않습니다 사용하고 있습니다.
이 오류는 거의 동일한 업데이트 작업에 동일한 "경로"의 두 가지 행동 할 수 없기 때문에 그 의미 것입니다. 두 사업자는 당신이 그들이 생각하는대로 순차적으로 처리하지 않습니다 사용하고 있습니다.
당신은 아마도 "대량"운영 API 또는 그러나 "대량"업데이트의 다른 형태로 얻을 수있는 "연속"으로이 작업을 수행 할 수 있습니다. 물론, 또한 반대의 이유 이내 :
var bulk = db.coll.initializeOrderedBulkOp(); bulk.find({ "tags": 1 }).updateOne({ "$addToSet": { "tags": 2 } }); bulk.find({ "tags": 1 }).updateOne({ "$pull": { "tags": 1 } }); bulk.execute();
다른 아무것도 수정하려고하지 않습니다, 그러나 가까이 현재 얻을 것 같은 것을 보장하지.
또한 여러 문서와 원시 "갱신"명령을 참조하십시오.
-
==============================
2.당신은 제거하고 동시에 추가하는 경우, 당신은 '지도'를 모델링하는 대신 '설정'을 할 수있다. 그렇다면, 객체 배열보다 일 수있다.
당신은 제거하고 동시에 추가하는 경우, 당신은 '지도'를 모델링하는 대신 '설정'을 할 수있다. 그렇다면, 객체 배열보다 일 수있다.
대신 배열로서 데이터 :
{ _id: 'myobjectwithdata', data: [{ id: 'data1', important: 'stuff'}, { id: 'data2', important: 'more'}] }
데이터를 객체로 사용
{ _id: 'myobjectwithdata', data: { data1: { important: 'stuff'}, data2: { important: 'more'} } }
한 - 명령 업데이트는 다음입니다 :
db.coll.update( 'myobjectwithdata', { $set: { 'data.data1': { important: 'treasure' } } );
여기와 여기에 일이 답변에 대한 하드 두뇌 작업입니다.
-
==============================
3.경우 다른 확인이 답변에 배열에서 하나 개의 값을 대체 할 필요가 :
경우 다른 확인이 답변에 배열에서 하나 개의 값을 대체 할 필요가 :
arrayFilters을 사용하여 배열 값을 바꾸기
from https://stackoverflow.com/questions/24300148/pull-and-addtoset-at-the-same-time-with-mongo by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] Node.js를 - 몽구스 - 점검 모음이있는 경우 (0) | 2019.12.15 |
---|---|
[MONGODB] 어떻게 몽고 문서에 중첩 된 필드의 데이터 유형을 변경하려면? (0) | 2019.12.15 |
[MONGODB] 어떻게하여 MongoDB의 하위 문서의 모든 필드를 요약하는? (0) | 2019.12.15 |
[MONGODB] 기계 IP를 사용하여 MongoDB를 연결할 수 없습니다 (0) | 2019.12.15 |
[MONGODB] MongoDB를 Linq에 거기에 "쿼리 설명"인가? (0) | 2019.12.15 |