Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

$bit

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$bit

O operador $bit executa uma atualização bitwise de um campo. O operador oferece suporte a operações bitwise and, bitwise or e bitwise xor (ou seja, exclusivo 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 a 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 NumberInt ou NumberLong para obter mais informações.

A partir do MongoDB 5.0, mongod não gera mais um erro quando você usa um operador de atualização como $bit com uma expressão de operando vazia ( { } ). Uma atualização vazia não resulta em nenhuma alteração e nenhuma entrada no oplog é criada (o que significa que a operação é um no-op).

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