你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用对象: MongoDB vCore
该 $bitAnd
运算符对整数值执行按位 AND 运算。 它将第一个作数的每一位与第二个作数的对应位进行比较。 如果两个位均为 1,则对应的结果位将设置为 1。 否则,将对应的结果位设置为 0。
语法
运算符的 $isArray
语法如下所示:
{
$bitAnd: [ <expression1>, <expression2>, ... ]
}
参数
DESCRIPTION | |
---|---|
expression1, expression2, ... |
计算结果为整数的表达式。 该 $bitAnd 运算符对所有提供的表达式执行按位 AND 运算。 |
示例:
让我们了解 stores
数据集中的示例 json 的用法。
{
"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
"name": "Proseware, Inc. | Home Entertainment Hub - East Linwoodbury",
"location": {
"lat": 70.1272,
"lon": 69.7296
},
"staff": {
"totalStaff": {
"fullTime": 19,
"partTime": 20
}
},
"sales": {
"totalSales": 151864,
"salesByCategory": [
{
"categoryName": "Sound Bars",
"totalSales": 2120
},
{
"categoryName": "Home Theater Projectors",
"totalSales": 45004
},
{
"categoryName": "Game Controllers",
"totalSales": 43522
},
{
"categoryName": "Remote Controls",
"totalSales": 28946
},
{
"categoryName": "VR Games",
"totalSales": 32272
}
]
},
"promotionEvents": [
{
"eventName": "Discount Delight Days",
"promotionalDates": {
"startDate": {
"Year": 2023,
"Month": 12,
"Day": 26
},
"endDate": {
"Year": 2024,
"Month": 1,
"Day": 5
}
},
"discounts": [
{
"categoryName": "Game Controllers",
"discountPercentage": 22
},
{
"categoryName": "Home Theater Projectors",
"discountPercentage": 23
}
]
}
]
}
示例 1:基本按位 AND作
对教职员工编号执行按位 AND作以创建权限标志。
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
fullTimeStaff: "$staff.totalStaff.fullTime",
partTimeStaff: "$staff.totalStaff.partTime",
staffPermissionFlag: {
$bitAnd: ["$staff.totalStaff.fullTime", "$staff.totalStaff.partTime"]
}
}
}
])
这将生成以下输出:
[
{
_id: '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
name: 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
fullTimeStaff: 20,
partTimeStaff: 19,
staffPermissionFlag: 16
}
]
按位 AND 为 19(以二进制为单位为 10011)和 20(二进制为 10100),等于 16(二进制为 10000)。
示例 2:与折扣百分比一起使用$bitAnd
对折扣百分比应用按位 AND作以创建组合的折扣标志。
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{ $unwind: "$promotionEvents" },
{ $match: {"promotionEvents.eventName": "Discount Delight Days"} },
{ $unwind: "$promotionEvents.discounts" },
{
$project: {
name: 1,
eventName: "$promotionEvents.eventName",
categoryName: "$promotionEvents.discounts.categoryName",
discountPercentage: "$promotionEvents.discounts.discountPercentage",
discountFlag: {
$bitAnd: ["$promotionEvents.discounts.discountPercentage", 31]
}
}
}
])
这将生成以下输出:
[
{
_id: '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
name: 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
eventName: 'Discount Delight Days',
categoryName: 'Game Controllers',
discountPercentage: 22,
discountFlag: 22
},
{
_id: '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
name: 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
eventName: 'Discount Delight Days',
categoryName: 'Home Theater Projectors',
discountPercentage: 23,
discountFlag: 23
},
.
.
.
]
以 31(二进制为单位为 11111)的按位 AND 运算提取每个折扣百分比的低 5 位。
示例 3:多个值 $bitAnd
对多个数值字段执行按位 AND 运算。
db.stores.aggregate([
{ $match: {"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74"} },
{
$project: {
name: 1,
combinedFlag: {
$bitAnd: [
"$staff.totalStaff.fullTime",
"$staff.totalStaff.partTime",
255
]
}
}
}
])
这将生成以下输出:
[
{
_id: '40d6f4d7-50cd-4929-9a07-0a7a133c2e74',
name: 'Proseware, Inc. | Home Entertainment Hub - East Linwoodbury',
combinedFlag: 16
}
]
该作对 19、20 和 255 执行按位 AND,结果为 16。