你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用对象: MongoDB vCore
该 $bitOr
运算符对整数值执行按位 OR 运算。 它将第一个作数的每一位与第二个作数的对应位进行比较。 如果其中一个位是 1,则将对应的结果位设置为 1。 如果这两个位均为 0,则相应的结果位设置为 0。
语法
运算符的 $isArray
语法如下所示:
{
$bitOr: [ <expression1>, <expression2>, ... ]
}
参数
DESCRIPTION | |
---|---|
expression1, expression2, ... |
计算结果为整数的表达式。 该 $bitOr 运算符对所有提供的表达式执行按位 OR 运算。 |
示例:
让我们了解 stores
数据集中的示例 json 的用法。
{
"_id": "f2a8c190-28e4-4e14-9d8b-0256e53dca66",
"name": "Fabrikam, Inc. | Car Accessory Outlet - West Adele",
"location": {
"lat": -47.2548,
"lon": -38.4071
},
"staff": {
"totalStaff": {
"fullTime": 3,
"partTime": 2
}
},
"sales": {
"totalSales": 31211,
"salesByCategory": [
{
"categoryName": "Phone Mounts",
"totalSales": 8911
},
{
"categoryName": "Dash Cameras",
"totalSales": 22300
}
]
},
"promotionEvents": [
{
"eventName": "Super Saver Spectacular",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 25
},
"endDate": {
"Year": 2024,
"Month": 4,
"Day": 1
}
},
"discounts": [
{
"categoryName": "Car Chargers",
"discountPercentage": 7
},
{
"categoryName": "Dash Cameras",
"discountPercentage": 11
}
]
}
]
}
示例 1:基本按位 OR作
对教职员工编号执行按位 OR作以合并权限标志。
db.stores.aggregate([
{ $match: {"_id": "f2a8c190-28e4-4e14-9d8b-0256e53dca66"} },
{
$project: {
name: 1,
fullTimeStaff: "$staff.totalStaff.fullTime",
partTimeStaff: "$staff.totalStaff.partTime",
combinedStaffFlag: {
$bitOr: ["$staff.totalStaff.fullTime", "$staff.totalStaff.partTime"]
}
}
}
])
这将生成以下输出:
[
{
_id: 'f2a8c190-28e4-4e14-9d8b-0256e53dca66',
name: 'Fabrikam, Inc. | Car Accessory Outlet - West Adele',
fullTimeStaff: 3,
partTimeStaff: 2,
combinedStaffFlag: 3
}
]
按位 OR 为 3(二进制为 011)和 2(二进制为 010)等于 3(二进制为 011)。
示例 2:对销售数据使用$bitOr
对销售数字应用按位 OR作以创建组合标志。
db.stores.aggregate([
{ $match: {"_id": "f2a8c190-28e4-4e14-9d8b-0256e53dca66"} },
{ $unwind: "$sales.salesByCategory" },
{
$project: {
name: 1,
categoryName: "$sales.salesByCategory.categoryName",
totalSales: "$sales.salesByCategory.totalSales",
// Combine lower 8 bits of sales with a base flag (15 = 00001111)
salesFlag: {
$bitOr: [
{ $toInt: { $mod: ["$sales.salesByCategory.totalSales", 256] } },
15
]
}
}
}
])
这将生成以下输出:
[
{
_id: 'f2a8c190-28e4-4e14-9d8b-0256e53dca66',
name: 'Fabrikam, Inc. | Car Accessory Outlet - West Adele',
categoryName: 'Phone Mounts',
totalSales: 8911,
salesFlag: 207
},
{
_id: 'f2a8c190-28e4-4e14-9d8b-0256e53dca66',
name: 'Fabrikam, Inc. | Car Accessory Outlet - West Adele',
categoryName: 'Dash Cameras',
totalSales: 22300,
salesFlag: 31
}
]
示例 3:按位或具有折扣百分比的多个值
对多个折扣值执行按位 OR作。
db.stores.aggregate([
{ $match: {"_id": "f2a8c190-28e4-4e14-9d8b-0256e53dca66"} },
{ $unwind: "$promotionEvents" },
{ $match: {"promotionEvents.eventName": "Super Saver Spectacular"} },
{
$project: {
name: 1,
eventName: "$promotionEvents.eventName",
discountFlags: {
$map: {
input: "$promotionEvents.discounts",
as: "discount",
in: {
categoryName: "$$discount.categoryName",
discountPercentage: "$$discount.discountPercentage",
combinedFlag: {
$bitOr: [
"$$discount.discountPercentage",
"$staff.totalStaff.fullTime",
"$staff.totalStaff.partTime"
]
}
}
}
}
}
}
])
这将生成以下输出:
[
{
_id: 'f2a8c190-28e4-4e14-9d8b-0256e53dca66',
name: 'Fabrikam, Inc. | Car Accessory Outlet - West Adele',
eventName: 'Super Saver Spectacular',
discountFlags: [
{
categoryName: 'Car Chargers',
discountPercentage: 7,
combinedFlag: 7
},
{
categoryName: 'Dash Cameras',
discountPercentage: 11,
combinedFlag: 11
}
]
}
]
该作使用按位 OR 将折扣百分比与员工编号组合在一起:7|3|2 = 7 和 11|3|2 = 11。
示例 4:创建权限标志
通过组合不同的访问级别,使用按位 OR 创建权限标志。
db.stores.aggregate([
{ $match: {"_id": "f2a8c190-28e4-4e14-9d8b-0256e53dca66"} },
{
$project: {
name: 1,
// Create permission flags: 1=read, 2=write, 4=execute
readPermission: 1,
writePermission: 2,
executePermission: 4,
fullPermissions: {
$bitOr: [1, 2, 4]
},
staffBasedPermissions: {
$bitOr: [
"$staff.totalStaff.fullTime",
"$staff.totalStaff.partTime",
8
]
}
}
}
])
这将生成以下输出:
[
{
_id: 'f2a8c190-28e4-4e14-9d8b-0256e53dca66',
name: 'Fabrikam, Inc. | Car Accessory Outlet - West Adele',
fullPermissions: 7,
staffBasedPermissions: 11
}
]