$bitsAllClear$bitsAllClearcoincide con los documentos donde todas las posiciones de bits dadas por la consulta están libres (es0decir,)fielden.{ <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
- Puede proporcionar una máscara de bits numérica que se comparará con el campo del operando. La máscara de bits debe ser un entero con signo de 0 64bits no negativo. De lo contrario, devuelve un
$bitsAllClearerror. - BinData Bitmask
- También puedes usar una instancia
BinDataarbitrariamente 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 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 expresiones de coincidencia de prueba de bits:
BinData Los valores actúan como máscaras de bits y se interpretan como si fueran números sin signo little-endian de longitud arbitraria. El byte direccionable más bajo siempre se interpreta como el byte menos significativo. De manera similar, el byte direccionable más alto en BinData siempre se interpreta como el byte más significativo.
Indexes
Las consultas no pueden usar índices para la $bitsAllClear parte de una consulta, aunque las otras partes de una consulta sí pueden usar índices, si corresponde.
Valores de punto flotante
$bitsAllClear 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.
Extensión de signo
Los números se extienden con signo. Por ejemplo, considera que la posición del bit$bitsAllClear está 200 activada para el número -5 negativo, pero 200 la posición del bit está desactivada 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 vacíos.
Ejemplos
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" } ])
arreglo de Posición de Bits
La siguiente consulta utiliza el operador para comprobar $bitsAllClear si a el campo tiene bits libres en la 1 posición y 5 en la posición, donde el bit menos significativo está en la 0 posición.
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 para comprobar $bitsAllClear si a el campo tiene bits desactivados 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 query coincide con los siguientes documentos:
{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" } { "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }
BinData Bitmask
La siguiente consulta utiliza el $bitsAllClear operador:
db.collection.find( { a: { $bitsAllClear: BinData(0, "IA==") } } )
La query:
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 para devolver documentos donde
$bitsAllClearelacampo tiene un bit0en blanco 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" }