$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" }