Menu Docs

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

$bitsAllSet

Nesta página

  • Comportamento
  • Exemplos
$bitsAllSet

$bitsAllSet corresponde a documentos em que todas as posições de bit fornecidas pela query estão definidas (ou seja, 1) em field.

{ <field>: { $bitsAllSet: <numeric bitmask> } }
{ <field>: { $bitsAllSet: < BinData bitmask> } }
{ <field>: { $bitsAllSet: [ <position1>, <position2>, ... ] } }

O valor field deve ser numérico ou uma instância BinData . Caso contrário, $bitsAllSet 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 com o campo operando. A máscara de bits deve ser um número inteiro assinado de 64bits. Caso contrário, $bitsAllSet retorna 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

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

$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.

Os números são assinados estendidos. Por exemplo, $bitsAllSet considera que a posição de bit 200 está definida para o número negativo -5, mas a posição de bit 200 deve estar definida para 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" })

$bitsAllSet considerará todos os bits fora de x 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" }
])

A query a seguir usa o operador $bitsAllSet para testar se o campo a tem bits definidos na posição 1 e na posição 5, onde o bit menos significativo é a posição 0.

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" }

A query seguinte utiliza o operador $bitsAllSet para testar se o campo a tem bits definidos nas posições 1, 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" }

A query seguinte utiliza o operador $bitsAllSet para testar se o campo a tem bits definidos nas posições 4 e 5 (a representação binária de BinData(0, "MA==") é 00110000).

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

A query corresponde ao seguinte documento:

{ _id: 1, a: 54, binaryValueofA: "00110110" }
← $bitsAllClear