Docs Menu
Docs Home
/ /

$bitsAllClear

$bitsAllClear

$bitsAllClear coincide con documentos donde todas las posiciones de bits dadas por la consulta están claras (es0 decir,) field en.

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

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

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

El field valor debe ser numérico o una instancia de.BinData $bitsAllClear De lo contrario, no coincidirá con el documento actual.

Máscara de bits numérica
Puede proporcionar una máscara de bits numérica para compararla con el campo del operando. La máscara de bits debe ser un entero con signo 64de bits no negativo. De lo contrario, devuelve un$bitsAllClear error.
BinData Bitmask
También puedes utilizar una instancia arbitrariamente grande BinData como máscara de bits.
Lista de posiciones
Al consultar una lista de posiciones de bit, cada <position> debe ser un entero positivo. Las posiciones de bit comienzan en 0 a partir del bit menos significativo. Por ejemplo, el número decimal 254 tendría las siguientes posiciones de bit:
Valor de bit
1
1
1
1
1
1
1
0

Posición

7

6

5

4

3

2

1

0

El endianismo de su sistema depende de la arquitectura de su máquina. Los números en datos BSON siempre se almacenan como little-endian; si su sistema es big-endian, significa que los datos numéricos se convierten entre big y little-endian.

En el contexto de los operadores de expresión de coincidencia de prueba de bits:

BinData Los valores actúan como máscaras de bitsy se interpretan como si fueran números little-endian sin signo de longitud arbitraria. El byte de menor direccionamiento siempre se interpreta como el byte menos significativo. De igual manera, el byte de mayor direccionamiento en BinData siempre se interpreta como el byte más significativo.

Las consultas no pueden utilizar índices para la $bitsAllClear parte de una consulta, aunque las otras partes de una consulta pueden utilizar índices, si corresponde.

$bitsAllClear No se coincidirán valores numéricos que no se puedan representar como un entero con signo de 64bits. Esto puede ocurrir si un valor es demasiado grande o demasiado pequeño para caber en un entero con signo de 64bits, o si tiene un componente fraccionario.

Los números se extienden por signo. Por ejemplo, considera que la posición de bit$bitsAllClear está 200 activada para el número -5 negativo, pero que la posición de bit 200 está libre para el número +5 positivo.

En cambio, las instancias de BinData tienen una extensión cero. Por ejemplo, dado el siguiente documento:

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

$bitsAllClear considerará que todos los bits fuera de x están limpios.

Los siguientes ejemplos utilizarán una colección con los siguientes 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" }
])

La siguiente consulta utiliza el operador para probar $bitsAllClear si a el campo tiene bits libres en la posición 1 y la 5 posición, donde el bit menos significativo es la 0 posición.

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

La consulta coincide con los siguientes documentos:

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

La siguiente consulta utiliza el operador para probar $bitsAllClear si a el campo tiene bits libres en las 0 posiciones, 1 y 5 (la representación binaria de la máscara de bits 35 00100011es).

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

La consulta coincide con los siguientes documentos:

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

La siguiente consulta utiliza el $bitsAllClear operador:

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

La consulta:

  • Especifica 0 como el primer valor de, lo que BinData indica IA== que debe interpretarse como binario. El64 valor IA== en base a 00100000 es, que tiene 1 en la 5 posición.

  • Utiliza para devolver documentos donde $bitsAllClear el a campo tiene un bit claro 0 en 5 la posición del valor binario.

La query devuelve los siguientes documentos:

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

Volver

Bitwise

En esta página