$bit
Nesta página
Definição
$bit
O operador
$bit
executa uma atualização bitwise de um campo. O operador aceita bitwiseand
, bitwiseor
e 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
mongosh
são duplos, não inteiros. Para especificar inteiros nomongosh
, use oNumberInt()
ou o construtorNumberLong()
. 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
expdata
usa
and
para aplicar o valor bitwise de Int32(10)atualiza
expdata
com 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
expdata
usa
or
para aplicar o valor bitwise de Int32(5)atualiza
expdata
com 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
expdata
usa
and
para aplicar o valor bitwise de Int32(5)atualiza
expdata
com 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 }