文档菜单
文档首页
/
MongoDB 手册
/ / / /

$bit

在本页

  • 定义
  • 行为
  • 示例
$bit

$bit运算符执行字段的位更新。该运算符支持位运算(即逻辑与、逻辑或和位异或)操作。要指定$bit运算符表达式,使用以下原型

{ $bit: { <field>: { <and|or|xor>: <int> } } }

仅将此运算符用于整数字段(32位整数或64位整数)。

要在嵌套文档或数组中指定<field>,使用点符号.

注意

mongosh中的所有数字都是双精度浮点数,而不是整数。要在mongosh中指定整数,请使用NumberInt()NumberLong()构造函数。有关更多信息,请参阅Int32Long

要了解您的MongoDB驱动程序如何处理数值,请参阅您的驱动程序文档。

从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 }

提示

另请参阅

返回

位运算