$bitsAllClear$bitsAllClearmatches documents where all of the bit positions given by the query are clear (i.e.0) infield.{ <field>: { $bitsAllClear: <numeric bitmask> } }{ <field>: { $bitsAllClear: <BinDatabitmask> } }{ <field>: { $bitsAllClear: [ <position1>, <position2>, ... ] } }The
fieldvalue must be either numeric or aBinDatainstance. Otherwise,$bitsAllClearwill not match the current document.- Máscara de bits numérica
- Você pode fornecer uma máscara de bits numérica para ser correspondida ao campo operando. A máscara de bits deve ser um 64número inteiro assinado de bits não negativo. Caso contrário, retorna um
$bitsAllClearerro. - Máscara de bits BinData
- Você também pode usar uma instância de
BinDataarbitrariamente 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 em0a partir do bit menos significativo. Por exemplo, o número decimal254teria as seguintes posições de bits:
Valor de bits11111110Posição
7
6
5
4
3
2
1
0
Comportamento
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 values act as bitmasks and are interpreted as though they are arbitrary-length unsigned little-endian numbers. The lowest-addressable byte is always interpreted as the least significant byte. Similarly, the highest-addressable byte in the BinData is always interpreted as the most significant byte.
Indexes
Queries cannot use indexes for the $bitsAllClear portion of a query, although the other portions of a query can use indexes, if applicable.
Valores de ponto flutuante
$bitsAllClear não corresponderá a valores numéricos que não possam ser representados como um número inteiro de 64 bits assinado. Esse pode ser o caso se um valor for muito grande ou muito pequeno para caber em um inteiro de 64 bits assinado ou se tiver um componente fracionário.
Extensão de sinal
Numbers are sign extended. For example, $bitsAllClear considers bit position 200 to be set for the negative number -5, but bit position 200 to be clear for the positive number +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 will consider all bits outside of x to be clear.
Exemplos
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" } ])
Array de posição de bits
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" }
Máscara de bits inteiros
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" }
Máscara de bits BinData
The following query uses the $bitsAllClear operator:
db.collection.find( { a: { $bitsAllClear: BinData(0, "IA==") } } )
A query:
Especifica
0como o primeiro valor paraBinData, o que indica queIA==deve ser interpretado como binário. O valor de base-64IA==em binário é00100000, que tem1na posição 5.Usa para retornar documentos onde
$bitsAllClearoacampo tem um bit limpo0na posição 5 do valor binário.
A consulta retorna os seguintes documentos:
{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" } { "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }