$bitsAllClear$bitsAllClearcoincide con los documentos en los que todas las posiciones de bits indicadas por la query están desactivadas (es decir,0) enfield.{ <field>: { $bitsAllClear: <numeric bitmask> } }{ <field>: { $bitsAllClear: <BinDatabitmask> } }{ <field>: { $bitsAllClear: [ <position1>, <position2>, ... ] } }El
fieldvalor debe ser numérico o una instancia de.BinData$bitsAllClearDe lo contrario, 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,
$bitsAllCleardevuelve un error. - BinData Bitmask
- También puedes utilizar una instancia arbitrariamente grande
BinDatacomo máscara de bits. - Lista de posiciones
- Si se consulta una lista de posiciones de bits, cada
<position>debe ser un número entero no negativo. Las posiciones de bits comienzan en0desde el bit menos significativo. Por ejemplo, el número decimal254tendría las siguientes posiciones de bits:
Valor de bit11111110Posición
7
6
5
4
3
2
1
0
Comportamiento
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 expresión 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.
Indexes
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.
Valores de punto flotante
$bitsAllClear No se coincidirán valores numéricos que no puedan representarse como un entero con signo de 64 bits. Esto puede ocurrir 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.
Extensión de signo
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.
Ejemplos
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" } ])
arreglo de Posición de Bits
La siguiente query usa el operador $bitsAllClear para comprobar si el campo a tiene bits desactivados en la posición 1 y la posición 5, siendo 0 la posición del bit menos significativo.
db.collection.find( { a: { $bitsAllClear: [ 1, 5 ] } } )
La query coincide con los siguientes documentos:
{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" } { "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }
Integer Bitmask
La siguiente consulta utiliza el operador $bitsAllClear para comprobar si el campo a tiene los bits 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: { $bitsAllClear: 35 } } )
La query coincide con los siguientes documentos:
{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" } { "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }
BinData Bitmask
La siguiente query utiliza el $bitsAllClear operador:
db.collection.find( { a: { $bitsAllClear: BinData(0, "IA==") } } )
La consulta:
Especifica
0como el primer valor deBinData, lo que indica queIA==debe interpretarse como binario. El valor en base 64IA==en binario es00100000, que tiene1en la posición 5.Utiliza
$bitsAllClearpara devolver documentos donde el campoatiene un bit claro0en la posición 5 del valor binario.
La query devuelve los siguientes documentos:
{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" } { "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }