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. Use o NumberInt() ou o NumberLong() construtor para especificar inteiros. Consulte Int32 ou Long para obter mais informações.

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:

← Operador de atualização do Bitwise