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

$bitsAllClear

本页内容

  • 行为
  • 示例
$bitsAllClear

$bitsAllClear 匹配所有由查询给出的位位置均为清除(即 0)的文档中的 字段

{ <field>: { $bitsAllClear: <numeric bitmask> } }
{ <field>: { $bitsAllClear: < BinData bitmask> } }
{ <field>: { $bitsAllClear: [ <position1>, <position2>, ... ] } }

字段 的值必须是数值或 BinData 实例。否则,$bitsAllClear 不会匹配当前文档。

数值掩码
您可以为运算字段提供一个要匹配的数值掩码。掩码必须是一个非负 64 位有符号整数。否则,$bitsAllClear 返回错误。
BinData 掩码
您还可以使用任意大小的 BinData 实例作为掩码。
位置列表
如果查询位位置列表,则每个 <position> 必须是非负整数。位位置从最低有效位开始,为 0。例如,十进制数 254 将具有以下位位置
位值
1
1
1
1
1
1
1
0
位置
7
6
5
4
3
2
1
0

您的系统的字节序取决于您的机器架构。在BSON数据中,数字始终以小端序存储,如果您的系统是大端序,这意味着数值数据将在大端序和小端序之间进行转换。

在位测试匹配表达式运算符的上下文中

BinData值充当位掩码,并被解释为任意长度的无符号小端序数字。最低可寻址字节始终被解释为最低有效字节。同样,BinData中的最高可寻址字节始终被解释为最高有效字节。

查询不能使用索引来查询查询的$bitsAllClear部分,尽管查询的其他部分如果适用,可以使用索引。

$bitsAllClear 不会匹配无法表示为有符号64位整数的数值。这可能发生在数值太大或太小无法适应有符号64位整数,或者它有一个分数部分的情况下。

数值进行符号扩展。例如,$bitsAllClear 将负数 -5 的位位置 200 视为已设置,但对于正数 +5,位位置 200 视为清除。

相比之下,BinData 实例为零扩展。例如,给定以下文档

db.collection.insertOne({ x: BinData(0, "ww=="), binaryValueofA: "11000011" })

$bitsAllClear 将考虑 x 之外的所有位为清除。

以下示例将使用以下文档的集合

db.collection.insertMany([
{ _id: 1, a: 54, binaryValueofA: "00110110" },
{ _id: 2, a: 20, binaryValueofA: "00010100" },
{ _id: 3, a: 20.0, binaryValueofA: "00010100" },
{ _id: 4, a: BinData(0, "Zg=="), binaryValueofA: "01100110" }
])

以下查询使用$bitsAllClear运算符来测试字段a在位置1和位置5的位是否为清除状态,其中最低位是位置0

db.collection.find( { a: { $bitsAllClear: [ 1, 5 ] } } )

查询匹配以下文档

{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" }
{ "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }

以下查询使用$bitsAllClear运算符来测试字段a在位置015(位掩码35的二进制表示为00100011)的位是否为清除状态。

db.collection.find( { a: { $bitsAllClear: 35 } } )

查询匹配以下文档

{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" }
{ "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }

以下查询使用$bitsAllClear运算符

db.collection.find( { a: { $bitsAllClear: BinData(0, "IA==") } } )

查询

  • 0指定为BinData的第一个值,表示IA==应被解释为二进制。二进制中的base-64值IA==00100000,其在位置5上为1。

  • 使用 $bitsAllClear 返回具有 a 字段在二进制值位置的 5 位的清零位的文档。

查询返回以下文档

{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" }
{ "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }

返回

位运算查询

本页内容