“文档” 菜单
文档首页
/
MongoDB Manual
/ / / /

$bit

在此页面上

  • 定义
  • 行为
  • 举例
$bit

$bit操作符对字段执行按位更新。 该操作符支持按位and 、按位or和按位xor (即 异或)操作。 要指定$bit操作符表达式,请使用以下原型:

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

此操作符仅用于整数字段(32 位整数或 64 位整数)。

要在嵌入式文档或数组中指定<field> ,请使用点表示法。

注意

mongosh中的所有数字都是双精度浮点数,而不是整数。使用NumberInt()NumberLong()构造函数指定整数。有关详细信息,请参阅Int 32Long

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

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 }

提示

另请参阅:

← 按位更新运算符

在此页面上