Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
aşağıdakiler için geçerlidir:
MongoDB sanal çekirdeği
$expr
işleci, aynı belgedeki alanları karşılaştırmamıza, hesaplamalar yapmamıza ve toplama işleçlerini bulma işlemlerinde kullanmamıza olanak tanıyan sorgu dili içinde toplama ifadelerinin kullanılmasına olanak tanır. işleci $expr
, geleneksel sorgu işleçleriyle elde edilemedi karmaşık alan karşılaştırmaları için kullanışlıdır.
Sözdizimi
İşlecin $expr
söz dizimi aşağıdaki gibidir:
{
$expr: { <aggregation expression> }
}
Parametreler
Açıklama | |
---|---|
<aggregation expression> |
Boole değeri olarak değerlendirilen geçerli toplama ifadeleri. İfade alan karşılaştırmalarını, aritmetik işlemleri, koşullu ifadeleri ve diğer toplama işleçlerini içerir. |
Örnek
Şimdi veri kümesinden stores
alınan örnek json ile kullanımı anlayalım.
{
"_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")
}
Örnek 1: Tam zamanlı ve yarı zamanlı personeli karşılaştırma
Örnek, tam zamanlı çalışan sayısının yarı zamanlı çalışanlardan daha fazla olduğu mağazaları alır.
db.stores.find({"_id": "40d6f4d7-50cd-4929-9a07-0a7a133c2e74",
$expr: {
$gt: ["$staff.employeeCount.fullTime", "$staff.employeeCount.partTime"]
}
})
Sorgu, aynı belgedeki iki alanı karşılaştırır ve koşul karşılanırsa belgeyi döndürür (tam zamanlı personel sayısı yarı zamanlı personel sayısını aşıyor).
{
"_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")
}
Örnek 2: Depolama konumuna sahip koşullu mantık
Örnekte, güney yarım kürede personel verimliliği oranının (çalışan başına satış) 2000'i aştığı $expr çekme mağazalarıyla koşullu mantık kullanımı gösterilmektedir.
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)
Sorgu, konum tabanlı filtrelemeyi hesaplanan verimlilik ölçümüyle birleştirerek karmaşık iş mantığının $expr
gücünü gösterir.
{
"_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")
}
İlgili içerik
- MongoDB'den MongoDB için Azure Cosmos DB'ye Geçiş seçeneklerini gözden geçirin (sanal çekirdek)
- MongoDB ile özellik uyumluluğu hakkında daha fazla bilgi edinin