Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
$bitsAnySet
Nesta página
$bitsAnySet
Novo na versão 3.2.
$bitsAnySet
corresponde a documentos em que qualquer uma das posições de bit fornecidas pela query está definida (ou seja,1
) emfield
.{ <field>: { $bitsAnySet: <numeric bitmask> } }
{ <field>: { $bitsAnySet: <
BinDatabitmask> } }
{ <field>: { $bitsAnySet: [ <position1>, <position2>, ... ] } }
O valor
field
deve ser numérico ou uma instância BinData . Caso contrário,$bitsAnySet
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,
$bitsAnySet
retorna um erro. - Máscara de bits BinData
- Você também pode usar uma instância BinData arbitrariamente grande como bitmask.
- 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 em0
a partir do bit menos significativo. Por exemplo, o número decimal254
teria as seguintes posições de bits:
Valor de bits11111110Posição76543210
Comportamento
Índices
As queries não podem usar índices para a parte de uma query $bitsAnySet
, embora as outras partes de uma query possam usar índices, se aplicável.
Valores de ponto flutuante
$bitsAnySet
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, $bitsAnySet
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
.
Em contraste, as instâncias BinData são estendidas para zero. Por exemplo, dado o seguinte documento:
db.collection.save({ x: BinData(0, "ww=="), binaryValueofA: "11000011" })
$bitsAnySet
considerará todos os bits fora de x
limpos.
Exemplos
Os exemplos a seguir utilizarão uma coleção com os seguintes documentos:
db.collection.save({ _id: 1, a: 54, binaryValueofA: "00110110" }) db.collection.save({ _id: 2, a: 20, binaryValueofA: "00010100" }) db.collection.save({ _id: 3, a: 20.0, binaryValueofA: "00010100" }) db.collection.save({ _id: 4, a: BinData(0, "Zg=="), binaryValueofA: "01100110" })
Array de posição de bits
A query a seguir usa o operador $bitsAnySet
para testar se o campo a
tem a posição de bit 1
ou a posição de bit 5
definida, em que o bit menos significativo é a posição 0
.
db.collection.find( { a: { $bitsAnySet: [ 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 usa o operador $bitsAnySet
para testar se o campo a
tem algum bit definido nas posições 0
, 1
e 5
(a representação binária da máscara de bits 35
é 00100011
).
db.collection.find( { a: { $bitsAnySet: 35 } } )
A consulta corresponde aos seguintes documentos:
{ "_id" : 1, "a" : 54, "binaryValueofA" : "00110110" } { "_id" : 4, "a" : BinData(0,"Zg=="), "binaryValueofA" : "01100110" }
Máscara de bits BinData
A query a seguir usa o operador $bitsAnySet
para testar se o campo a
tem algum bit definido nas posições 4
e 5
(a representação binária de BinData(0, "MA==")
é 00110000
).
db.collection.find( { a: { $bitsAnySet: BinData(0, "MA==") } } )
A consulta corresponde aos seguintes documentos:
{ "_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" }