Anteckning
Å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.
GÄLLER FÖR:
MongoDB vCore
Operatorn $expr
tillåter användning av aggregeringsuttryck inom frågespråket, vilket gör att vi kan jämföra fält från samma dokument, utföra beräkningar och använda aggregeringsoperatorer i sökåtgärder. Operatorn $expr
är användbar för komplexa fältjämförelser som inte kan uppnås med traditionella frågeoperatorer.
Syntax
Syntaxen för operatorn $isArray
är följande:
{
$expr: { <aggregation expression> }
}
Parametrar
beskrivning | |
---|---|
<aggregation expression> |
Alla giltiga aggregeringsuttryck som utvärderas till ett booleskt värde. Uttrycket innehåller fältjämförelser, aritmetiska åtgärder, villkorsuttryck och andra aggregeringsoperatorer. |
Exempel
Nu ska vi förstå användningen med exempel-json från stores
datauppsättningen.
{
"_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
}
]
},
"storeOpeningDate": ISODate("2024-09-23T13:45:01.480Z"),
"lastUpdated": ISODate("2025-06-11T11:06:57.922Z"),
"status": "active",
"category": "high-volume",
"priority": 1,
"reviewDate": ISODate("2025-06-11T11:10:50.276Z")
}
Exempel 1: Jämför heltids- och deltidsanställda
Exemplet hämtar butiker med antalet heltidsanställda större än deltidsanställda.
db.stores.find({"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
$expr: {
$gt: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"]
}
})
Frågan jämför två fält i samma dokument och returnerar dokumentet om villkoret uppfylls (antalet heltidsanställda överskrider antalet deltidsanställda).
{
"_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
}
]
},
"storeOpeningDate": ISODate("2024-09-23T13:45:01.480Z"),
"lastUpdated": ISODate("2025-06-11T11:06:57.922Z"),
"status": "active",
"category": "high-volume",
"priority": 1,
"reviewDate": ISODate("2025-06-11T11:10:50.276Z")
}
Exempel 2: Villkorsstyrd logik med lagringsplats
Exemplet visar användningen av villkorsstyrd logik med $expr som hämtar butiker på södra halvklotet där personaleffektivitetskvoten (försäljning per anställd) överstiger 2000.
db.stores.find({{"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
$expr: {
$and: [
{ $gte: ["$location.lat", 70.1272] },
{
$gt: [
{
$divide: [
"$sales.totalSales",
{ $add: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"] }
]
},
2000
]
}
]
}
}).limit(1)
Frågan kombinerar platsbaserad filtrering med ett beräknat effektivitetsmått som visar kraften $expr
i för komplex affärslogik.
{
"_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
}
]
},
"storeOpeningDate": ISODate("2024-09-23T13:45:01.480Z"),
"lastUpdated": ISODate("2025-06-11T11:06:57.922Z"),
"status": "active",
"category": "high-volume",
"priority": 1,
"reviewDate": ISODate("2025-06-11T11:10:50.276Z")
}
Relaterat innehåll
- Granska alternativ för migrering från MongoDB till Azure Cosmos DB för MongoDB (virtuell kärna)
- Läs mer om funktionskompatibilitet med MongoDB