Definición
$bitEl operador
$bitrealiza una actualización bit a bit de un campo. El operador admite operaciones bit a bitand,oryxor(es decir, OR exclusivo). Para especificar una expresión del operador$bit, utilice el siguiente prototipo:{ $bit: { <field>: { <and|or|xor>: <int> } } } Utiliza este operador únicamente con campos enteros (ya sean enteros de 32 bits o de 64 bits).
Para especificar un
<field>en un documento incrustado o en un arreglo, utiliza notación de puntos.Nota
Todos los números en
mongoshson de tipo double, no enteros. Para especificar enteros enmongosh, utilice el constructorInt32()oLong(). Para obtener más información, consulte Int32 o Long.Para saber cómo maneja su controlador de MongoDB los valores numéricos, consulte la documentación de su controlador.
Comportamiento
A partir de MongoDB, 5.0, mongod ya no genera un error cuando se utiliza un operador de actualización como $bit con una expresión de operando vacía ( { } ). Una actualización vacía no produce cambios y no se crea ninguna entrada en el oplog (lo que significa que la operación no tiene efecto).
A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.
Ejemplos
Los siguientes ejemplos utilizan la colección switches:
db.switches.insertMany( [ { _id: 1, expdata: Int32(13) }, { _id: 2, expdata: Int32(3) }, { _id: 3, expdata: Int32(1) } ] )
AND bitwise
Utiliza un operador bit a bit and en la operación updateOne() para actualizar expdata.
db.switches.updateOne( { _id: 1 }, { $bit: { expdata: { and: Int32( 10 ) } } } )
La operación and bit a bit:
obtiene el valor bit a bit de
expdatautiliza
andpara aplicar el valor bit a bit de Int32(10)actualiza
expdatacon el resultado, 1000
1101 // expdata 1010 // Int32(10) ---- 1000
El binario 1000 equivale a Int32(8). El comando db.switches.find( { _id: 1 } ) devuelve el siguiente documento:
{ "_id" : 1, "expdata" : 8 }
Bitwise OR
Utiliza un operador bit a bit or en la operación updateOne() para actualizar expdata.
db.switches.updateOne( { _id: 2 }, { $bit: { expdata: { or: Int32( 5 ) } } } )
La operación or bit a bit:
obtiene el valor bit a bit de
expdatautiliza
orpara aplicar el valor a nivel de bits de Int32(5)actualiza
expdatacon el resultado, 0111
0111 // expdata 0101 // Int32(5) ---- 0111
El binario 0111 equivale a Int32(7). El comando db.switches.find( { _id: 2 } ) devuelve el siguiente documento:
{ "_id" : 2, "expdata" : 7 }
Bitwise XOR
Utiliza un operador bit a bit xor en la operación updateOne() para actualizar expdata.
db.switches.updateOne( { _id: 3 }, { $bit: { expdata: { xor: Int32( 5 ) } } } )
La operación and bit a bit:
obtiene el valor bit a bit de
expdatautiliza
andpara aplicar el valor a nivel de bits de Int32(5)actualiza
expdatacon el resultado, 0100
0001 // expdata 0101 // Int32(5) ---- 0100
El binario 0100 es equivalente a Int32(4). El comando db.switches.find( { _id: 3 } ) devuelve el siguiente documento:
{ "_id" : 1, "expdata" : 4 }