Menu Docs

$bitsAllClear

$bitsAllClear

$bitsAllClear matches documents where todos of the bit positions given by the query are clear (i.e. 0) in field.

{ <field>: { $bitsAllClear: <numeric bitmask> } }

{ <field>: { $bitsAllClear: < BinData bitmask> } }

{ <field>: { $bitsAllClear: [ <position1>, <position2>, ... ] } }

O valor field deve ser numérico ou uma instância BinData. Caso contrário, o $bitsAllClear não corresponderá ao documento atual.

Máscara de bits numérica
Você pode fornecer uma máscara de bits numérica para comparação com o campo do operando. Ela deve ser um inteiro de 64 bits assinado não negativo. Caso contrário, $bitsAllClear retornará um erro.
Máscara de bits BinData
Você também pode usar uma instância deBinData arbitrariamente grande como uma máscara de bits.
Lista de posições
Ao consultar uma lista de posições de bits, cada <position> deve ser um número inteiro não negativo. As posições dos bits começam em 0 a partir do bit menos significativo. Por exemplo, o número decimal 254 teria as seguintes posições de bits:
Valor de bits
1
1
1
1
1
1
1
0

Posição

7

6

5

4

3

2

1

0

A endianidade do seu sistema depende da arquitetura da sua máquina. Os números nos dados BSON são sempre armazenados como little-endian, se o seu sistema for big-endian , isso significa que os dados numéricos são convertidos entre big e little endian.

No contexto dos operadores de expressão de correspondência de teste de bit:

BinData Os valores atuam como bitmasks e são interpretados como se fossem números little-endian sem sinal de comprimento arbitrário. O byte endereçável mais baixo é sempre interpretado como o byte menos significativo. Da mesma forma, o byte endereçável de maior valor no BinData é sempre interpretado como o byte mais significativo.

As queries não podem usar índices para a parte $bitsAllClear de uma query, embora as outras partes de uma query possam usar índices, se aplicável.

$bitsAllClear não corresponderá aos valores numéricos que não podem ser representados como um número inteiro 64bits assinado. Esse pode ser o caso se um valor for muito grande ou muito pequeno para caber em um número inteiro 64bits assinado ou se tiver um componente fracionário.

Os números são estendidos por sinais. Por exemplo, $bitsAllClear considera a posição de bit 200 definida para o número negativo -5, mas a posição de bit 200 definida como o número positivo +5.

Por outro lado, instâncias BinData são estendidas a zero. Por exemplo, dado o seguinte documento:

db.collection.insertOne({ x: BinData(0, "ww=="), binaryValueofA: "11000011" })

$bitsAllClear vai considerar todos os bits fora de x como limpos.

Os exemplos a seguir utilizarão uma coleção com os seguintes documentos:

db.collection.insertMany([
{ _id: 1, a: 54, binaryValueofA: "00110110" },
{ _id: 2, a: 20, binaryValueofA: "00010100" },
{ _id: 3, a: 20.0, binaryValueofA: "00010100" },
{ _id: 4, a: BinData(0, "Zg=="), binaryValueofA: "01100110" }
])

The following query uses the $bitsAllClear operator to test whether field a has bits clear at position 1 and position 5, where the least significant bit is position 0.

db.collection.find( { a: { $bitsAllClear: [ 1, 5 ] } } )

A consulta corresponde aos seguintes documentos:

{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" }
{ "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }

The following query uses the $bitsAllClear operator to test whether field a has bits clear at positions 0, 1, and 5 (the binary representation of the bitmask 35 is 00100011).

db.collection.find( { a: { $bitsAllClear: 35 } } )

A consulta corresponde aos seguintes documentos:

{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" }
{ "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }

The following query uses the $bitsAllClear operator:

db.collection.find( { a: { $bitsAllClear: BinData(0, "IA==") } } )

The query:

  • Specifies 0 as the first value for BinData, which indicates IA== should be interpreted as binary. The base-64 value IA== in binary is 00100000, which has 1 in position 5.

  • Uses $bitsAllClear to return documents where the a field has a clear bit 0 in position 5 of the binary value.

A consulta retorna os seguintes documentos:

{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" }
{ "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }