$bit
定义
行为
从MongoDB 5.0开始,当您使用一个更新运算符,如$bit
,并且操作数表达式为空({}
)时,mongod
不再引发错误。空更新不会导致任何更改,也不会创建任何操作日志条目(意味着操作是无效的)。
从MongoDB 5.0开始,更新运算符按基于字符串的名称的字典顺序处理文档字段。具有数字名称的字段按数字顺序处理。有关详细信息,请参阅更新运算符行为。
示例
以下示例使用switches
集合
db.switches.insertMany( [ { _id: 1, expdata: Int32(13) }, { _id: 2, expdata: Int32(3) }, { _id: 3, expdata: Int32(1) } ] )
位与
在updateOne()
操作中使用位与来更新expdata
。
db.switches.updateOne( { _id: 1 }, { $bit: { expdata: { and: Int32( 10 ) } } } )
位与操作
获取
expdata
的位值使用
和
来应用 Int32(10) 的位运算值使用结果,1000 更新
expdata
1101 // expdata 1010 // Int32(10) ---- 1000
二进制 1000 等于 Int32(8)。执行 db.switches.find( { _id: 1 } )
命令返回以下文档
{ "_id" : 1, "expdata" : 8 }
位或
在 updateOne()
操作中使用位或来更新 expdata
。
db.switches.updateOne( { _id: 2 }, { $bit: { expdata: { or: Int32( 5 ) } } } )
位或操作
获取
expdata
的位值使用
or
来应用 Int32(5) 的位运算值使用结果,0111 更新
expdata
0111 // expdata 0101 // Int32(5) ---- 0111
二进制 0111 等于 Int32(7)。执行 db.switches.find( { _id: 2 } )
命令返回以下文档
{ "_id" : 2, "expdata" : 7 }
位异或
在 updateOne()
操作中使用位异或来更新 expdata
。
db.switches.updateOne( { _id: 3 }, { $bit: { expdata: { xor: Int32( 5 ) } } } )
位与操作
获取
expdata
的位值使用
and
来应用 Int32(5) 的位运算值使用结果,0100 更新
expdata
0001 // expdata 0101 // Int32(5) ---- 0100
二进制 0100 等于 Int32(4)。执行 db.switches.find( { _id: 3 } )
命令返回以下文档
{ "_id" : 1, "expdata" : 4 }