$bitsAnySet$bitsAnySetcoincide con documentos en los que cualquiera de las posiciones de bits dadas por la consulta está establecida (es1decir,)fielden.{ <field>: { $bitsAnySet: <numeric bitmask> } }{ <field>: { $bitsAnySet: <BinDatabitmask> } }{ <field>: { $bitsAnySet: [ <position1>, <position2>, ... ] } }El
fieldvalor debe ser numérico o una instancia de.BinData$bitsAnySetDe 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
$bitsAnySeterror. - BinData Bitmask
- También puedes utilizar una instancia arbitrariamente grande
BinDatacomo 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 en0a partir del bit menos significativo. Por ejemplo, el número decimal254tendría las siguientes posiciones de bit:
Valor de bit11111110Posición
7
6
5
4
3
2
1
0
Comportamiento
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.
Indexes
Las consultas no pueden utilizar índices para la $bitsAnySet parte de una consulta, aunque las otras partes de una consulta pueden utilizar índices, si corresponde.
Valores de punto flotante
$bitsAnySet 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.
Extensión de señal
Los números se extienden por signo. Por ejemplo, considera que la posición de bit$bitsAnySet 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" })
$bitsAnySet 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" } ])
Matriz de posición de bits
La siguiente consulta utiliza el operador para probar $bitsAnySet si a el campo tiene establecida la posición de bit 1 o la posición de 5 bit, donde el bit menos significativo es la 0 posición.
db.collection.find( { a: { $bitsAnySet: [ 1, 5 ] } } )
La consulta coincide con los siguientes documentos:
{ "_id" : 1, "a" : 54, "binaryValueofA" : "00110110" } { "_id" : 4, "a" : BinData(0,"Zg=="), "binaryValueofA" : "01100110" }
Integer Bitmask
La siguiente consulta utiliza el operador para probar $bitsAnySet si a el campo tiene bits establecidos en las 0 posiciones, 1 y 5 (la representación binaria de la máscara de bits 35 00100011es).
db.collection.find( { a: { $bitsAnySet: 35 } } )
La consulta coincide con los siguientes documentos:
{ "_id" : 1, "a" : 54, "binaryValueofA" : "00110110" } { "_id" : 4, "a" : BinData(0,"Zg=="), "binaryValueofA" : "01100110" }
BinData Bitmask
La siguiente consulta utiliza el operador para probar $bitsAnySet si a el campo tiene bits establecidos en las posiciones 4 y 5 (la representación binaria BinData(0, "MA==") de 00110000 es).
db.collection.find( { a: { $bitsAnySet: BinData(0, "MA==") } } )
La consulta 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" }