Definition
$bitThe
$bitoperator performs a bitwise update of a field. The operator supports bitwiseand, bitwiseor, and bitwisexor(i.e. exclusive or) operations. To specify a$bitoperator expression, use the following prototype:{ $bit: { <field>: { <and|or|xor>: <int> } } } Only use this operator with integer fields (either 32-bit integer or 64-bit integer).
To specify a
<field>in an embedded document or in an array, use dot notation.
Behavior
Starting in MongoDB 5.0, mongod no longer raises an
error when you use an update operator like $bit
with an empty operand expression ( { } ). An empty update results
in no changes and no oplog entry is created (meaning that the
operation is a no-op).
Starting in MongoDB 5.0, update operators process document fields with string-based names in lexicographic order. Fields with numeric names are processed in numeric order. See Update Operators Behavior for details.
Examples
The following examples use the switches collection:
db.switches.insertMany( [ { _id: 1, expdata: Int32(13) }, { _id: 2, expdata: Int32(3) }, { _id: 3, expdata: Int32(1) } ] )
Bitwise AND
Use a bitwise and in the updateOne()
operation to update expdata.
db.switches.updateOne( { _id: 1 }, { $bit: { expdata: { and: Int32( 10 ) } } } )
The bitwise and operation:
gets the bitwise value of
expdatauses
andto apply the bitwise value of Int32(10)updates
expdatawith the result, 1000
1101 // expdata 1010 // Int32(10) ---- 1000
Binary 1000 is equivalent to Int32(8). The
db.switches.find( { _id: 1 } ) command returns the following
document:
{ "_id" : 1, "expdata" : 8 }
Bitwise OR
Use a bitwise or in the updateOne()
operation to update expdata.
db.switches.updateOne( { _id: 2 }, { $bit: { expdata: { or: Int32( 5 ) } } } )
The bitwise or operation:
gets the bitwise value of
expdatauses
orto apply the bitwise value of Int32(5)updates
expdatawith the result, 0111
0111 // expdata 0101 // Int32(5) ---- 0111
Binary 0111 is equivalent to Int32(7). The
db.switches.find( { _id: 2 } ) command returns the following
document:
{ "_id" : 2, "expdata" : 7 }
Bitwise XOR
Use a bitwise xor in the updateOne()
operation to update expdata.
db.switches.updateOne( { _id: 3 }, { $bit: { expdata: { xor: Int32( 5 ) } } } )
The bitwise and operation:
gets the bitwise value of
expdatauses
andto apply the bitwise value of Int32(5)updates
expdatawith the result, 0100
0001 // expdata 0101 // Int32(5) ---- 0100
Binary 0100 is equivalent to Int32(4). The
db.switches.find( { _id: 3 } ) command returns the following
document:
{ "_id" : 1, "expdata" : 4 }