Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$bitsAnyClear (query predicate operador)

$bitsAnyClear

$bitsAnyClear coincide con documentos donde cualquiera de las posiciones de bits dadas por la query están claras (es decir, 0) en field.

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

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

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

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

Máscara de bits numérica
Puedes proporcionar una máscara de bits numérica que se compare con el campo operando. La máscara de bits debe ser un número entero con signo no negativo de 64bits. De lo contrario, $bitsAnyClear devuelve un error.
BinData Bitmask
También puedes usar una instancia BinData arbitrariamente grande como máscara de bits.
Lista de cargos
Si se consulta una lista de posiciones de bits, cada <position> debe ser un número entero no negativo. Las posiciones de bits comienzan en 0 desde el bit menos significativo. Por ejemplo, el número decimal 254 tendría las siguientes posiciones de bits:
Valor de bit
1
1
1
1
1
1
1
0

Posición

7

6

5

4

3

2

1

0

La endianidad de tu sistema depende de la arquitectura de tu equipo. Los números en los datos BSON siempre se almacenan como little-endian, y si tu sistema es big-endian esto significa que los datos numéricos se convierten entre big y little endian.

En el contexto de los operadores de expresiones de coincidencia de prueba de bits:

Los valores BinData funcionan como máscaras de bits y se interpretan como si fueran números sin signo de longitud arbitraria en formato little-endian. El byte de menor dirección siempre se interpreta como el byte menos significativo. Del mismo modo, el byte direccionable más alto en el BinData siempre se interpreta como el byte más significativo.

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

$bitsAnyClear no coincidirán con valores numéricos que no puedan ser representados como un entero de 64 bits con signo. Este puede ser el caso si un valor es demasiado grande o demasiado pequeño para caber en un entero con signo de 64 bits, o si tiene un componente fraccionario.

Los números se extienden por signo. Por ejemplo, $bitsAnyClear considera que la posición del bit 200 está configurada para el número negativo -5, pero la posición del bit 200 está despejada para el número positivo +5.

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

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

Los siguientes ejemplos usará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 query utiliza el operador $bitsAnyClear para comprobar si el campo a tiene despejada la posición de bit 1 o la posición de bit 5, donde el bit menos significativo es la posición 0.

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

La query coincide con los siguientes documentos:

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

La siguiente query utiliza el operador $bitsAnyClear para comprobar si el campo a tiene algún bit desactivados en las posiciones 0, 1 y 5 (la representación binaria de la máscara de bits 35 es 00100011).

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

La query coincide con los siguientes 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" }

La siguiente query utiliza el operador $bitsAnyClear para probar si el campo a tiene algún bit claro en las posiciones 4 y 5 (la representación binaria de BinData(0, "MA==") es 00110000).

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

La query coincide con los siguientes documentos:

{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" }
{ "_id" : 3, "a" : 20.0, "binaryValueofA" : "00010100" }
{ "_id" : 4, "a" : BinData(0,"Zg=="), "binaryValueofA" : "01100110" }

Volver

$bitsAllSet

En esta página