Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
APLICA-SE A: MongoDB vCore
O $bitOr
operador executa uma operação OR bit a bit em valores inteiros. Ele compara cada bit do primeiro operando com o bit correspondente do segundo operando. Se qualquer bit for 1, o bit de resultado correspondente será definido como 1. Se ambos os bits forem 0, o bit de resultado correspondente será definido como 0.
Sintaxe
A sintaxe do operador é a $isArray
seguinte:
{
$bitOr: [ <expression1>, <expression2>, ... ]
}
Parâmetros
Descrição | |
---|---|
expression1, expression2, ... |
Expressões que são avaliadas como inteiros. O $bitOr operador executa uma operação OR bit a bit em todas as expressões fornecidas. |
Exemplo
Vamos entender o uso com o JSON de exemplo do conjunto de dados stores
.
{
"_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
}
]
}
]
}
Exemplo 1: Operação OR bit a bit básica
Execute uma operação OR bit a bit em números de equipe para combinar sinalizadores de permissão.
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"]
}
}
}
])
Isso produzirá a seguinte saída:
[
{
_id: 'f2a8c190-28e4-4e14-9d8b-0256e53dca66',
name: 'Fabrikam, Inc. | Car Accessory Outlet - West Adele',
fullTimeStaff: 3,
partTimeStaff: 2,
combinedStaffFlag: 3
}
]
O OR bit a bit de 3 (011 em binário) e 2 (010 em binário) é igual a 3 (011 em binário).
Exemplo 2: Usando $bitOr com dados de vendas
Aplique operações OR bit a bit em números de vendas para criar sinalizadores combinados.
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
]
}
}
}
])
Isso produzirá a seguinte saída:
[
{
_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
}
]
Exemplo 3: OR bit a bit múltiplo com porcentagens de desconto
Execute a operação OR bit a bit em vários valores de desconto.
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"
]
}
}
}
}
}
}
])
Isso produzirá a seguinte saída:
[
{
_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
}
]
}
]
A operação combina percentuais de desconto com números de pessoal usando OR bit a bit: 7|3|2 = 7 e 11|3|2 = 11.
Exemplo 4: Criando sinalizadores de permissão
Use OR bit a bit para criar sinalizadores de permissão combinando diferentes níveis de acesso.
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
]
}
}
}
])
Isso produzirá a seguinte saída:
[
{
_id: 'f2a8c190-28e4-4e14-9d8b-0256e53dca66',
name: 'Fabrikam, Inc. | Car Accessory Outlet - West Adele',
fullPermissions: 7,
staffBasedPermissions: 11
}
]
Conteúdo relacionado
- Examinar as opções de migração do MongoDB para o Azure Cosmos DB for MongoDB (vCore)
- Leia mais sobre Compatibilidade de recursos com o MongoDB