[MONGODB] 어떻게 원자 조작으로 하나 개의 문서에 부울 필드를 전환하려면?
MONGODB어떻게 원자 조작으로 하나 개의 문서에 부울 필드를 전환하려면?
원자 조작에 MongoDB를 한 문서의 부울 필드를 전환 할 수있는 방법이 있습니까? 말, (에서 파이썬)
cl.update({"_id": ...}, {"$toggle": {"field": 1}})
해결법
-
==============================
1.지금, 나는 그것이 하나 개의 작업으로이 작업을 수행 할 수 생각하지 않습니다. 나는 그것을 위해 패치를했습니다 있지만 비트 연산자는 (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) 아직 '$ XOR'을 필요가 없습니다.
지금, 나는 그것이 하나 개의 작업으로이 작업을 수행 할 수 생각하지 않습니다. 나는 그것을 위해 패치를했습니다 있지만 비트 연산자는 (http://www.mongodb.org/display/DOCS/Updating#Updating-%24bit) 아직 '$ XOR'을 필요가 없습니다.
지금은 내가 항상 '$ INC'를 사용하는 것입니다 생각 생각 해결 방법 :
cl.update( { "_id": ...}, { '$inc' : { 'field' : 1 } } );
그리고 대신 true 또는 false 확인, 당신은 항목이 "true"로되어 있는지 확인 할 수 있습니다 :
cl.find( { "_id": ..., 'field' : { '$mod' : [ 2, 1 ] } );
IE는, 당신은 심지어 "해제", 고르지 존재 "설정을"인 상태도 또는 고르지의 여부를 확인하기 위해 모듈로 연산자를 사용하여. 당신이 oppposite 동작을 실행하려면, 다음 사용 (즉, 플래그가 설정되지 않은 모든 항목을 찾을 수) [2, 0];
-
==============================
2.서버 4362 문제는 실제로 지금 해결 당신은 $ 비트 업데이트 연산자를 사용할 수 있습니다. 그래서 그것의 XOR 인수와 함께 이제 원자 행동으로이 작업을 수행 할 수 있습니다 :
서버 4362 문제는 실제로 지금 해결 당신은 $ 비트 업데이트 연산자를 사용할 수 있습니다. 그래서 그것의 XOR 인수와 함께 이제 원자 행동으로이 작업을 수행 할 수 있습니다 :
cl.findOneAndUpdate( { "_id": ...}, { "$bit": { "field": { "xor": NumberInt(1) } } }, { "returnNewDocument": true, "upsert": true } );
따라서 한 필드의 값이 0 또는 1 다음 비트의 "폴더"로 유지 될 때 그 현재 값은 변형시에 있었는지의 대향하게됩니다.
.findOneAndUpdate ()는 필요하지만 결과 값이 모든 수정에 다른 것을 보여주는 단지 방법이되지 않습니다.
from https://stackoverflow.com/questions/9459789/how-to-toggle-a-boolean-field-in-one-document-with-atomic-operation by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의 로컬 시간대에서 집계 (0) | 2019.12.19 |
---|---|
[MONGODB] MongoDB를 일치 $ 유형의 배열? (0) | 2019.12.19 |
[MONGODB] 업데이트 arrayFilters와 MongoDB를에서 하위 문서를 중첩 (0) | 2019.12.19 |
[MONGODB] 항상 임베디드와 엠버 데이터 다중 계층 구조 (0) | 2019.12.19 |
[MONGODB] 하위 문서에 Nodejs 몽고 삽입 - 동적 필드 이름 (0) | 2019.12.19 |