Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

$bit

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$bit

O operador $bit executa uma atualização bitwise de um campo. O operador aceita bitwise and, bitwise or e bitwise xor (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.

Observação

Todos os números em mongosh são duplos, não inteiros. Para especificar inteiros no mongosh, use o NumberInt() ou o construtor NumberLong() . Para saber mais, consulte Int32 ou Long.

Para saber como seu driver MongoDB lida com valores numéricos, consulte a documentação do driver.

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.

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) }
] )

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 }

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 }

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 }

Dica

Veja também:

Voltar

Bit a bit

Próximo

Sessões do servidor