$bitsAllSet$bitsAllSetcorresponde a documentos em que todas as posições de bit fornecidas pela query estão definidas (ou1seja,)fieldem.{ <field>: { $bitsAllSet: <numeric bitmask> } }{ <field>: { $bitsAllSet: <BinDatabitmask> } }{ <field>: { $bitsAllSet: [ <position1>, <position2>, ... ] } }O
fieldvalor deve ser numérico ou uma instânciaBinData$bitsAllSet. Caso contrário, não corresponderá ao documento atual.- 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
$bitsAllSeterro. - 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 Os valores agem 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.
Indexes
As queries não podem usar índices para a $bitsAllSet parte de uma query, embora as outras partes de uma query possam usar índices, se aplicável.
Valores de ponto flutuante
$bitsAllSet 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
Os números são assinados estendidos. Por exemplo, considera que a posição de$bitsAllSet bit 200 está definida para o número -5 negativo, mas a posição de bit 200 está definida para o número +5 positivo.
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" })
$bitsAllSet considerará todos os bits fora de x limpos.
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
A query seguinte utiliza o operador para testar $bitsAllSet se a o campo tem bits definidos na posição 1 e na 5 posição, onde o bit menos significativo é a 0 posição.
db.collection.find( { a: { $bitsAllSet: [ 1, 5 ] } } )
A consulta corresponde aos seguintes documentos:
{ "_id" : 1, "a" : 54, "binaryValueofA" : "00110110" } { "_id" : 4, "a" : BinData(0,"Zg=="), "binaryValueofA" : "01100110" }
Máscara de bits inteiros
A query seguinte utiliza o operador para testar $bitsAllSet se a o campo tem bits definidos nas 1 posições, 4 e 5 (a representação binária da máscara de bits 50 00110010é).
db.collection.find( { a: { $bitsAllSet: 50 } } )
A query corresponde ao seguinte documento:
{ "_id" : 1, "a" : 54, "binaryValueofA" : "00110110" }
Máscara de bits BinData
A query seguinte utiliza o operador para testar $bitsAllSet se a o campo tem bits definidos nas posições 4 e 5 (a representação binária BinData(0, "MA==") de 00110000 é).
db.collection.find( { a: { $bitsAllSet: BinData(0, "MA==") } } )
A query corresponde ao seguinte documento:
{ _id: 1, a: 54, binaryValueofA: "00110110" }