$bitsAllClear
$bitsAllClear
$bitsAllClear
匹配所有由查询给出的位位置均为清除(即0
)的文档中的 字段。{ <field>: { $bitsAllClear: <numeric bitmask> } }
{ <field>: { $bitsAllClear: [ <position1>, <position2>, ... ] } }
字段
的值必须是数值或BinData
实例。否则,$bitsAllClear
不会匹配当前文档。- 数值掩码
- 您可以为运算字段提供一个要匹配的数值掩码。掩码必须是一个非负 64 位有符号整数。否则,
$bitsAllClear
返回错误。 - BinData 掩码
- 您还可以使用任意大小的
BinData
实例作为掩码。 - 位置列表
- 如果查询位位置列表,则每个
<position>
必须是非负整数。位位置从最低有效位开始,为0
。例如,十进制数254
将具有以下位位置
位值11111110位置76543210
行为
您的系统的字节序取决于您的机器架构。在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
在位置0
、1
和5
(位掩码35
的二进制表示为00100011
)的位是否为清除状态。
db.collection.find( { a: { $bitsAllClear: 35 } } )
查询匹配以下文档
{ "_id" : 2, "a" : 20, "binaryValueofA" : "00010100" } { "_id" : 3, "a" : 20, "binaryValueofA" : "00010100" }
BinData位掩码
以下查询使用$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" }