Definição
$bitO operador
$bitexecuta uma atualização bitwise de um campo. O operador aceita bitwiseand, bitwiseore bitwisexor(ou seja operações exclusivas ou). Para especificar uma expressão de operador$bit, use o protótipo abaixo:{ $bit: { <field>: { <and|or|xor>: <int> } } } Use este operador apenas com campos inteiros (inteiro de 32 bits ou inteiro de 64 bits).
Para especificar um
<field>em um documento incorporado ou em uma array, use notação de ponto de ponto.Observação
Todos os números em
mongoshsão duplos, não inteiros. Para especificar inteiros nomongosh, use oInt32()ou o construtorLong(). Para saber mais, consulte Int32 ou Long.Para saber como seu driver MongoDB lida com valores numéricos, consulte a documentação do driver.
Comportamento
A partir do MongoDB 5.0, mongod não gera mais um erro ao usar um operador de atualização como $bit com uma expressão de operando vazia ( { } ). Uma atualização vazia não resulta em alteração e nenhuma entrada no oplog é criada (o que significa que é sem operação).
A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.
Exemplos
Os exemplos a seguir usam a coleção switches:
db.switches.insertMany( [ { _id: 1, expdata: Int32(13) }, { _id: 2, expdata: Int32(3) }, { _id: 3, expdata: Int32(1) } ] )
Bitwise AND
Utilize um and bitwise na operação updateOne() para atualizar o expdata.
db.switches.updateOne( { _id: 1 }, { $bit: { expdata: { and: Int32( 10 ) } } } )
A operação bitwise and:
obtém o valor bitwise de
expdatausa
andpara aplicar o valor bitwise de Int32(10)atualiza
expdatacom o resultado, 1000
1101 // expdata 1010 // Int32(10) ---- 1000
O binário 1000 é equivalente a Int32(8). O comando db.switches.find( { _id: 1 } ) retorna o seguinte documento:
{ "_id" : 1, "expdata" : 8 }
Bitwise OR
Utilize um or bitwise na operação updateOne() para atualizar o expdata.
db.switches.updateOne( { _id: 2 }, { $bit: { expdata: { or: Int32( 5 ) } } } )
A operação bitwise or:
obtém o valor bitwise de
expdatausa
orpara aplicar o valor bitwise de Int32(5)atualiza
expdatacom o resultado, 0111
0111 // expdata 0101 // Int32(5) ---- 0111
O binário 0111 é equivalente a Int32(7). O comando db.switches.find( { _id: 2 } ) retorna o seguinte documento:
{ "_id" : 2, "expdata" : 7 }
Bitwise XOR
Utilize um xor bitwise na operação updateOne() para atualizar o expdata.
db.switches.updateOne( { _id: 3 }, { $bit: { expdata: { xor: Int32( 5 ) } } } )
A operação bitwise and:
obtém o valor bitwise de
expdatausa
andpara aplicar o valor bitwise de Int32(5)atualiza
expdatacom o resultado, 0100
0001 // expdata 0101 // Int32(5) ---- 0100
O binário 0100 é equivalente a Int32(4). O comando db.switches.find( { _id: 3 } ) retorna o seguinte documento:
{ "_id" : 1, "expdata" : 4 }