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.
$merge Toplama işlem hattındaki aşama, toplama sorgusunun sonuçlarını belirtilen koleksiyona yazmak için kullanılır. Bu aşama, bir toplama işleminin çıktısına göre belgeleri güncelleştirme veya hedef koleksiyona ekleme gibi görevler için özellikle yararlıdır. Veri dönüştürme ve veri kalıcılığını tek bir işlemde birleştirerek iş akışlarını kolaylaştırmaya yardımcı olur.
Sözdizimi
{
$merge: {
into: <collection>,
on: <field or fields>,
whenMatched: <action>,
whenNotMatched: <action>
}
}
Parametreler
| Parametre | Description |
|---|---|
into |
Toplama sonuçlarının yazılacağı hedef koleksiyonu belirtir. |
on |
Hedef koleksiyondaki eşleşen belgeleri tanımlamak için alanları belirtir. |
whenMatched |
Eşleşen bir belge bulunduğunda gerçekleştirecek eylemi belirtir. Seçenekler arasında merge, replace, keepExisting, fail, veya özel bir işlem hattı bulunur. |
whenNotMatched |
Eşleşen belge bulunamadığında gerçekleştirecek eylemi belirtir.
insert veya discard seçenekler arasında bulunur. |
Örnekler
Stores koleksiyonundaki bu örnek belgeyi göz önünde bulundurun.
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile",
"location": {
"lat": 60.1441,
"lon": -141.5012
},
"staff": {
"totalStaff": {
"fullTime": 2,
"partTime": 0
}
},
"sales": {
"salesByCategory": [
{
"categoryName": "DJ Headphones",
"totalSales": 35921
}
],
"fullSales": 3700
},
"promotionEvents": [
{
"eventName": "Bargain Blitz Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 3,
"Day": 11
},
"endDate": {
"Year": 2024,
"Month": 2,
"Day": 18
}
},
"discounts": [
{
"categoryName": "DJ Turntables",
"discountPercentage": 18
},
{
"categoryName": "DJ Mixers",
"discountPercentage": 15
}
]
}
],
"tag": [
"#ShopLocal",
"#SeasonalSale",
"#FreeShipping",
"#MembershipDeals"
]
}
Örnek 1: Verileri bir koleksiyonda birleştirme
Bu sorgu, belgeleri toplar ve sonuçları adlı salesSummarybir koleksiyona yazar; eşleşen mevcut belgeleri _id güncelleştirir ve aksi takdirde yeni belgeler ekler.
db.sales.aggregate([
{
$group: {
_id: "$sales.salesByCategory.categoryName",
totalSales: { $sum: "$sales.salesByCategory.totalSales" }
}
},
{
$merge: {
into: "salesSummary",
on: "_id",
whenMatched: "merge",
whenNotMatched: "insert"
}
}
])
Örnek 2: Hedef koleksiyondaki belgeleri değiştirme
Bu örnek, promotionEventsSummary alanına göre _id koleksiyonundaki belgeleri değiştirir.
db.promotionEvents.aggregate([
{
$project: {
_id: "$eventName",
startDate: "$promotionalDates.startDate",
endDate: "$promotionalDates.endDate",
totalDiscounts: { $size: "$discounts" }
}
},
{
$merge: {
into: "promotionEventsSummary",
on: "_id",
whenMatched: "replace",
whenNotMatched: "insert"
}
}
])