비트
정의
$bit
$bit
연산자는 필드의 비트 업데이트를 수행합니다. 연산자는 비트 단위and
, 비트 단위or
및 비트 단위xor
(즉, 배타적 논리합) 연산입니다.$bit
연산자 표현식을 지정하려면 다음 프로토타입을 사용합니다.{ $bit: { <field>: { <and|or|xor>: <int> } } } 이 연산자는 정수 필드(32비트 정수 또는 64비트 정수)에만 사용할 수 있습니다.
내장된 문서 나 배열 에
<field>
을 지정하려면 점 표기법 을 사용합니다.참고
mongosh
의 모든 숫자는 정수가 아닌 더블입니다.mongosh
에서 정수를 지정하려면NumberInt()
또는NumberLong()
생성자를 사용합니다. 학습 보려면 Int32 또는 Long을 참조하세요.MongoDB 드라이버가 숫자 값을 처리하는 방법을 알아보려면 드라이버 설명서를 참조하세요.
행동
MongoDB 5.0부터 빈 피연산자 표현식( { }
)과 함께 $bit
과 같은 업데이트 연산자를 사용할 때 mongod
에서 더 이상 오류가 발생하지 않습니다. 업데이트가 비어 있으면 변경 사항이 없으며 oplog 항목이 생성되지 않습니다(즉, 작업이 작동하지 않음을 의미합니다).
MongoDB 5.0부터 업데이트 연산자는 문자열 기반 이름이 있는 문서 필드를 사전순으로 처리합니다. 숫자 이름이 있는 필드는 숫자 순서대로 처리됩니다. 자세한 내용은 업데이트 운영자 동작을 참조하십시오.
예시
다음 예시에서는 switches
컬렉션을 사용합니다.
db.switches.insertMany( [ { _id: 1, expdata: Int32(13) }, { _id: 2, expdata: Int32(3) }, { _id: 3, expdata: Int32(1) } ] )
Bitwise AND
updateOne()
작업에서 and
비트를 사용하여 expdata
를 업데이트합니다.
db.switches.updateOne( { _id: 1 }, { $bit: { expdata: { and: Int32( 10 ) } } } )
비트 and
작업은 다음을 수행합니다.
다음의 비트 값을 가져옵니다.
expdata
and
를 사용하여 Int32(10)의 비트 값을 적용합니다.결과 1000으로
expdata
를 업데이트합니다.
1101 // expdata 1010 // Int32(10) ---- 1000
바이너리 1000은 Int32(8)에 해당합니다. db.switches.find( { _id: 1 } )
명령은 다음 문서를 반환합니다.
{ "_id" : 1, "expdata" : 8 }
Bitwise OR
updateOne()
작업에서 or
비트를 사용하여 expdata
를 업데이트합니다.
db.switches.updateOne( { _id: 2 }, { $bit: { expdata: { or: Int32( 5 ) } } } )
비트 or
작업은 다음을 수행합니다.
다음의 비트 값을 가져옵니다.
expdata
or
을 사용하여 Int32(5)의 비트 값을 적용합니다.결과 0111로
expdata
를 업데이트합니다.
0111 // expdata 0101 // Int32(5) ---- 0111
바이너리 0111은 Int32(7)에 해당합니다. db.switches.find( { _id: 2 } )
명령은 다음 문서를 반환합니다.
{ "_id" : 2, "expdata" : 7 }
Bitwise XOR
updateOne()
작업에서 xor
비트를 사용하여 expdata
를 업데이트합니다.
db.switches.updateOne( { _id: 3 }, { $bit: { expdata: { xor: Int32( 5 ) } } } )
비트 and
작업은 다음을 수행합니다.
다음의 비트 값을 가져옵니다.
expdata
and
을 사용하여 Int32(5)의 비트 값을 적용합니다.결과 0100으로
expdata
를 업데이트합니다.
0001 // expdata 0101 // Int32(5) ---- 0100
바이너리 0100은 Int32(4)
에 해당합니다. db.switches.find( { _id: 3 } )
명령은 다음 문서를 반환합니다.
{ "_id" : 1, "expdata" : 4 }