此版本的文档已存档,不再提供支持。要升级6.0部署,请参阅 MongoDB 7.0升级程序。
定义
行为
从 MongoDB 5.0 开始,使用带空操作数表达式 ({ }) 的更新操作符(如 $bit)时,mongod 不会再引发错误。空更新不会导致任何变化,也不会创建 oplog 条目(意味着该操作为“无操作”)。
从 MongoDB 5.0 开始,更新操作符按字典顺序处理具有基于字符串的名称的文档字段。具有数字名称的字段按数字顺序处理。详情请参阅更新操作符行为。
示例
以下示例使用 switches 集合:
db.switches.insertMany( [ { _id: 1, expdata: Int32(13) }, { _id: 2, expdata: Int32(3) }, { _id: 3, expdata: Int32(1) } ] )
按位与
在 updateOne() 操作中使用按位 and 更新 expdata。
db.switches.updateOne( { _id: 1 }, { $bit: { expdata: { and: Int32( 10 ) } } } )
按位 and 操作:
获取按位值:
expdata使用
and应用 Int32(10) 的按位值用结果 1000 更新
expdata
1101 // expdata 1010 // Int32(10) ---- 1000
二进制 1000 等效于 Int32(8)。db.switches.find( { _id: 1 } ) 命令将返回以下文档:
{ "_id" : 1, "expdata" : 8 }
按位或
在 updateOne() 操作中使用按位 or 更新 expdata。
db.switches.updateOne( { _id: 2 }, { $bit: { expdata: { or: Int32( 5 ) } } } )
按位 or 操作:
获取按位值:
expdata使用
or应用 Int32(5) 的按位值使用结果 0111 更新
expdata
0111 // expdata 0101 // Int32(5) ---- 0111
二进制 0111 等效于 Int32(7)。db.switches.find( { _id: 2 } ) 命令将返回以下文档:
{ "_id" : 2, "expdata" : 7 }
Bitwise XOR
在 updateOne() 操作中使用按位 xor 更新 expdata。
db.switches.updateOne( { _id: 3 }, { $bit: { expdata: { xor: Int32( 5 ) } } } )
按位 and 操作:
获取按位值:
expdata使用
and应用 Int32(5) 的按位值使用结果 0100 更新
expdata
0001 // expdata 0101 // Int32(5) ---- 0100
二进制 0100 相当于 Int32(4)。db.switches.find( { _id: 3 } ) 命令返回以下文档:
{ "_id" : 1, "expdata" : 4 }