Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Operatorn $or utför en logisk OR-åtgärd på en matris med uttryck och hämtar dokument som uppfyller minst ett av de angivna villkoren.
Syntax
{
$or: [{
< expression1 >
}, {
< expression2 >
}, ..., {
< expressionN >
}]
}
Parameterar
| Parameter | Description |
|---|---|
expression |
En matris med uttryck, där minst en måste vara sann för att ett dokument ska inkluderas |
Examples
Överväg det här exempeldokumentet från butiksamlingen.
{
"_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
"name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
"location": {
"lat": -89.2384,
"lon": -46.4012
},
"staff": {
"totalStaff": {
"fullTime": 8,
"partTime": 20
}
},
"sales": {
"totalSales": 75670,
"salesByCategory": [
{
"categoryName": "Wine Accessories",
"totalSales": 34440
},
{
"categoryName": "Bitters",
"totalSales": 39496
},
{
"categoryName": "Rum",
"totalSales": 1734
}
]
},
"promotionEvents": [
{
"eventName": "Unbeatable Bargain Bash",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Whiskey",
"discountPercentage": 7
},
{
"categoryName": "Bitters",
"discountPercentage": 15
},
{
"categoryName": "Brandy",
"discountPercentage": 8
},
{
"categoryName": "Sports Drinks",
"discountPercentage": 22
},
{
"categoryName": "Vodka",
"discountPercentage": 19
}
]
},
{
"eventName": "Steal of a Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 29
}
},
"discounts": [
{
"categoryName": "Organic Wine",
"discountPercentage": 19
},
{
"categoryName": "White Wine",
"discountPercentage": 20
},
{
"categoryName": "Sparkling Wine",
"discountPercentage": 19
},
{
"categoryName": "Whiskey",
"discountPercentage": 17
},
{
"categoryName": "Vodka",
"discountPercentage": 23
}
]
}
]
}
Exempel 1: Använd OR-åtgärden som logisk fråga
Den här frågan hämtar butiker med mer än 15 heltidsanställda eller fler än 20 deltidsanställda, kör en fråga med hjälp av $or-operatorn för båda villkoren. Projicera sedan bara namn- och personalfälten från butikerna i resultatuppsättningen.
db.stores.find(
{
$or: [
{ "staff.employeeCount.fullTime": { $gt: 15 } },
{ "staff.employeeCount.partTime": { $gt: 20 } }
]
},
{
"name": 1,
"staff": 1
}
).limit(2)
De första två resultaten som returneras av den här frågan är:
[
{
"_id": "dda2a7d2-6984-40cc-bbea-4cbfbc06d8a3",
"name": "Contoso, Ltd. | Home Improvement Closet - Jaskolskiview",
"staff": {
"employeeCount": {
"fullTime": 16,
"partTime": 8
}
}
},
{
"_id": "44fdb9b9-df83-4492-8f71-b6ef648aa312",
"name": "Fourth Coffee | Storage Solution Gallery - Port Camilla",
"staff": {
"employeeCount": {
"fullTime": 17,
"partTime": 15
}
}
}
]
Exempel 2: Använd OR-operatorn som booleskt uttryck för att identifiera butiker med antingen hög försäljning eller stor personal
Den här frågan hämtar butiker som antingen har en total försäljning som är större än 50 000 eller mer än 25 anställda totalt.
db.stores.aggregate([
{
$project: {
name: 1,
totalSales: "$sales.totalSales",
totalStaff: {
$add: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"]
},
qualifiesForProgram: {
$or: [
{ $gt: ["$sales.totalSales", 50000] },
{ $gt: [{ $add: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"] }, 25] }
]
}
}
},
{ $limit: 4 }
])
De första fyra resultaten som returneras av den här frågan är:
[
{
"_id": "905d1939-e03a-413e-a9c4-221f74055aac",
"name": "Trey Research | Home Office Depot - Lake Freeda",
"totalStaff": 31,
"qualifiesForProgram": true
},
{
"_id": "a715ab0f-4c6e-4e9d-a812-f2fab11ce0b6",
"name": "Lakeshore Retail | Holiday Supply Hub - Marvinfort",
"totalStaff": 27,
"qualifiesForProgram": true
},
{
"_id": "923d2228-6a28-4856-ac9d-77c39eaf1800",
"name": "Lakeshore Retail | Home Decor Hub - Franciscoton",
"totalStaff": 13,
"qualifiesForProgram": false
},
{
"_id": "7e53ca0f-6e24-4177-966c-fe62a11e9af5",
"name": "Contoso, Ltd. | Office Supply Deals - South Shana",
"totalStaff": 2,
"qualifiesForProgram": false
}
]
Prestandaöverväganden
- Granska förslagen för att hitta bättre prestanda.
- Varje villkor i
$ormatrisen utvärderas oberoende - Använd index när det är möjligt för bättre prestanda
- Överväg ordningen på villkoren för optimalt utförande
- Använd
$ini stället$orför för flera likhetskontroller i samma fält - Håll antalet
$orvillkor rimligt
- Varje villkor i
Relaterat innehåll
- Granska alternativen för att migrera från MongoDB till Azure DocumentDB.
- Läs mer om funktionskompatibilitet med MongoDB.