MongoDB Aggregate Framework Turkçe Meta Açıklaması: MongoDB Aggregate Framework, çeşitli sorguları kullanarak birden fazla dokümanı birleştirmek ve sonuçlarını analiz etmek için kullanılan bir veri işleme aracıdır Karmaşık veritabanı sorgularını daha kolay ve hızlı bir şekilde ele almanıza yardımcı olur MongoDB Aggregate Framework ile daha verimli ve etkili bir veri işleme deneyimi yaşayabilirsiniz
MongoDB Aggregate Framework, MongoDB veritabanı için önemli bir özelliktir. Bu özellik, birden fazla belge üzerinde gruplama, filtreleme ve işlemler yapmanıza olanak tanır. Bu da kompleks sorguların basitleştirilmesine ve zamanın azaltılmasına yardımcı olur. Aggregate Framework'u kullanarak sorgular, verilerin büyüklüğüne bakılmaksızın düzenlenebilir.
Aggregate Framework, MongoDB sürümü 2.2'den itibaren kullanılmaya başlandı ve sürüm 3.5'ten sonra daha etkili hale geldi. Bu özellik, iki adımda çalışır; belge yığını üzerinde bir dizi işlem gerçekleştirir ve sonuçlarını açıklayıcı bir şekilde sunar.
Aggregate Framework Nedir?
Aggregate Framework, MongoDB'nin veritabanlarındaki var olan verilerin daha spesifik bir şekilde ele alınmasını sağlayan bir özelliktir. Bu işlem, büyük veri kümelerinin analizinde oldukça önemlidir. Aggregate Framework sayesinde verilerin gruplandırılması, sıralanması ve filtrelenmesi işlemleri gerçekleştirilebilmektedir. Bu özellik aynı zamanda verilerin birleştirilmesi (join) işlemlerinde de kullanılabilir.
Aggregate Framework'in bir diğer kullanım alanı, veritabanındaki verilerin işlenmesinde büyük bir kolaylık sağlamasıdır. Özellikle SQL diline aşina olan kullanıcılar, Aggregate Framework ile birlikte MongoDB veritabanlarında da SQL benzeri sorguları rahatlıkla gerçekleştirebilmektedirler.
Aggregate Framework, MongoDB ile birlikte verilerin daha anlaşılır ve spesifik bir şekilde analiz edilmesine olanak sağladığından oldukça kıymetli bir özelliktir. Bu özellik sayesinde veritabanındaki verilerin daha iyi bir şekilde anlaşılabilmesi ve kullanılabilmesi mümkün olmaktadır.
Örnek Aggregate Pipeline
Aggregate Framework, MongoDB'nin veritabanlarında daha kompleks sorguların yapılmasına izin veren bir özelliktir. Aggregate, birden fazla veri işleme adımı içeren bir pipeline'a sokularak verileri dönüştürür. Aggregate Pipeline, işlemler için sırayla okunan bir dizi işlemdir.
Bir örnek olarak, bir telekomünikasyon şirketinin bir veritabanını düşünelim. Bu şirketin farklı bölgelerdeki kullanıcılardan aldığı faturaların bir listesine sahip olsun. Bu veritabanındaki faturaların detaylarını öğrenmek için Aggregate Pipeline kullanabiliriz:
$match: { | "invoiceDate": { | $gte: start_date, | $lte: end_date | } | } | ||
$project: { | "_id": 0, | "invoiceDate": 1, | "region": 1, | "total": { | $multiply: ["$amount", "$rate"] | } | } |
$group: { | "_id": "$region", | "averageAmount": { | $avg: "$total" | } | } | ||
$sort: { | "averageAmount": -1 | } | |||||
$limit: 10 |
Bu pipeline, fatura tarihi (invoiceDate) parametrelerine ve bölgeye göre ara bir sonuç kümesini (filteredResults) elde eder. Daha sonra, total alanını fatura tutarı (amount) ve döviz kuru (rate) değerlerinin çarpımı olarak hesaplar. Sonra, her bölge için ortalamayı (averageAmount) hesaplar. Son olarak, sonuçları averageAmount alanına göre sıralar ve ilk 10 sonucu döndürür.
Bu örnekte, Aggregate Framework kategori bazlı ölçüt hesaplama ve sonuçları filtreleme gibi işlemler için kullanılmıştır. Aggregate Framework, verileri daha derinlemesine analiz ederken, veriyi okumanın daha kolay ve daha esnek yollarını sağlar. Bu sayede, bir takım işleyiş tüm kullanıcılar için daha rahat bir kullanım sağlar.
$match
$match: MongoDB'deki Aggregation Framework içinde kullanılan bir operatördür. Bu operatör, belirli bir koşula göre verileri filtrelememize ve ilgili verilerle işlem yapmamıza olanak sağlar. $match operatörü, bir filtreleme işlemi yapar ve belirtilen koşula uyan belgeleri döndürür. Bu koşullar, işlemlerde daha fazla verimlilik elde edilmesine ve performansın artırılmasına yardımcı olur.
Bir örnek olarak, bir veri kümesindeki belgelerin açıklamasını filtrelemek istediğimizi varsayalım. Bu durumda, $match operatörünü kullanarak belirli bir kelimeyi arayarak ve belgelere uyanları filtreleyerek sonuçları görebiliriz. Verilerdeki belirli bir özelliğe göre filtreleme yapmak için ise, o özellik için uygun bir sorgu yazmamız gerekiyor. Örneğin, bir müşteri veri kümesinde, 18 yaşından büyük olan müşterileri filtrelemek için aşağıdaki sorguyu kullanabiliriz:
Sorgu | Açıklama |
---|---|
db.customers.aggregate([{'$match': {"age": {'$gt':'18'}}}]) | Customers veri kümesinde, 18 yaşından büyük müşterileri filtreleyen sorgu |
Burada, db.customers
koleksiyonunun içinde 'age' özelliği 18'den büyük olan belgeler filtrelenir.
$match operatörü, birden fazla koşulla da kullanılabilir. Bir belge, tüm koşullara uyduğunda seçilebilir. Örneğin aşağıdaki sorgu, 'age' özelliği 18'den büyük olan ve İstanbullu olan müşterileri filtreler:
Sorgu | Açıklama |
---|---|
db.customers.aggregate([{'$match': {"age": {'$gt':'18'}, "city": 'Istanbul'}}]) | Customers veri kümesinde, 18 yaşından büyük ve İstanbullu olan müşterileri filtreleyen sorgu |
Burada, koleksiyonda 'age' özelliği 18 den büyük ve 'city' özelliği İstanbul olan belgeler filtrelenir.
$match operatörü, Aggregate Framework içinde kullanılan bir diğer operatörle de birlikte kullanılır: $project. Bu birleşik kullanım sayesinde, hangi alanların alınacağı ve koşulların belirtilmesi gerçekleştirilebilir.
$and
$and operatörü, MongoDB Aggregate Framework'teki $match operatörü ile birlikte kullanılır. $and operatörü, birden fazla koşulu karşılayan belgeleri bulmak için kullanılır. $and operatörü için bir örnek vermek gerekirse, aşağıdaki sorgu tüm belgeleri bulur, ancak "age" alanı 25'ten küçük veya "address" alanı "istanbul" olmayan belgeler hariç:
Sorgu | Açıklama |
---|---|
db.users.aggregate([ { $match: { $and: [ { age: { $gte: 25 } }, { address: "istanbul" } ] } }]) | Yaşı 25'ten büyük ve adresi "istanbul" olan belgeleri bul |
Bu sorgu, hem age alanı 25'ten büyük olan belgeleri hem de address alanı "istanbul" olan belgeleri bulur. İki koşulu karşılayan belgeleri döndürür. $and operatörünün yanı sıra, birçok diğer mantıksal operatör de Aggregate Framework'te kullanılabilir.
$or
$or operatörü, MongoDB Aggregate Framework ile birden fazla koşulu işlemek için kullanılır. Bu operatör, belirli koşulların en az birinin doğru olması durumunda eşleşen bir belge seçer. Böylece, bir veya daha fazla koşulların yanı sıra alternatif koşulların da kullanılabilmesine olanak sağlar.
Örneğin, bir müşteri tablosu düşünün ve bu tabloda müşterilerin yaşı, cinsiyeti ve bölgesi gibi farklı özellikleri bulunsun. $or operatörü kullanarak, 18 yaşından küçük müşterileri veya İstanbul'da yaşayan müşterileri seçebilirsiniz. Bunu bir $match operatörü kullanarak şu şekilde yapabilirsiniz:
{ $match: { $or: [ { age: { $lt: 18 } }, { region: 'Istanbul' } ] } }
Bu örnek, yaşı 18'den küçük veya İstanbul'da yaşayan müşterileri seçecektir.
$group
$group operatörü, belirli bir alana göre MongoDB koleksiyonları içindeki belgeleri gruplamak için kullanılır. Bu operatör, birçok kullanışlı operatör de içerir. $sum, $avg ve $max gibi operatörler verileri toplar, ortalama hesaplar ve maksimum değerleri belirler. Ayrıca, belirli alanlara sahip belgeleri gruplamak için $push, $addToSet ve $first/$last gibi operatörler de kullanılabilir.
$group operatörünün kullanımı oldukça kolaydır. İlk olarak, group operatörü yer alan belirli bir alanın belgelerini gruplamak için belirtilir. Ardından, bu grupların belirli özellikleri belirlenir. Örneğin, belirli bir alana göre belge sayısını toplamak için aşağıdaki kod parçası kullanılabilir:
```db.collection.aggregate([ { $group : { _id : "$alanAdi", toplamSayi : { $sum : 1 } } }])```
Yukarıdaki kod parçası bir MongoDB koleksiyonundaki her belgeyi, alanAdi özelliklerine göre gruplar ve her grup için "toplamSayi" adlı bir özellik ekler. Bu, belirli bir alana sahip belge sayısını toplar.
$group operatörü için diğer özellikler, belirli bir alandaki belge sayısını saymak, belirli bir alana göre belge sıralamak, birden fazla alanı gruplamak ve diğer birçok işlevi yerine getirmek gibi işlemleri gerçekleştirmek için kullanılabilir.
$group operatörü, birçok farklı senaryoda kullanışlıdır ve Aggregate Framework içinde MongoDB verilerini yönetmek için etkili bir araçtır.
$sum
$sum, MongoDB'nin Aggregate Framework özelliğinde kullanılan bir operatördür. Bu operatör, belirli bir alanın tüm değerlerini toplamak için kullanılır. Kullanımı oldukça basittir. Öncelikle, bir gruplama işlemi gerçekleştirilir ve ardından gruplanan değerlerin belirli alanları seçilerek toplam işlemi gerçekleştirilir.
Bir örnek kullanarak daha iyi anlayabiliriz. Örneğin, bir restoranın menüsündeki yemeklerin fiyatları hesaplanmak isteniyor. Bu durumda, kullanılabilecek bir $sum operatörü örneği şu şekildedir:
Category | Item | Price |
---|---|---|
Starters | Salad | 10 |
Starters | Soup | 12 |
Main Course | Steak | 30 |
Main Course | Fish | 25 |
Burada, menüdeki yemeklerin fiyatlarını toplamak istediğimizde, öncelikle ana yemekler ve başlangıçlar gibi kategorilere göre gruplama işlemi yapılabilir. Daha sonra, her kategorinin fiyat toplamı hesaplanabilir. İşte bu noktada $sum operatörü devreye girer ve toplama işlemini gerçekleştirir.
Örneğimizde, ana yemekler kategorisi için $sum operatörü şu şekilde kullanılabilir:
{$group: { _id: "$category", total_price: {$sum: "$price"} }}
Bu kod, ana yemekler kategorisi altında toplam fiyatları hesaplayacak ve sonuçları "total_price" alanında saklayacaktır.
$avg
$avg, bir MongoDB işlevi olan Aggregate Framework ile kullanılan bir operatördür. En genel anlamıyla, belirli bir aralıktaki belirli bir sütundaki sayıların ortalamasını hesaplar ve sonucu yeni bir belgede görüntüler.
Örneğin, bir ürün satışı veritabanımız var ve her ürünün fiyatı ile satış adeti bilgisi bulunuyor. Toplam satışların ortalama fiyatını bulmak istiyoruz. Bu durumda, $avg operatörü kullanılabilir. Aşağıdaki örnekte, ürünlerimiz için ortalama satış fiyatı hesaplanmaktadır:
Ürün | Fiyat | Satış Miktarı |
---|---|---|
Samsung TV | 5000 | 100 |
iPhone X | 8000 | 50 |
Macbook Pro | 10000 | 25 |
Aşağıdaki MongoDB sorgusu, bu verilerin ortalama fiyatını alabilir:
db.urunler.aggregate([ { $group: { _id: null, avgPrice: { $avg: "$Fiyat" } } }])
- $group operatörü sütunları gruplarken, $avg operatörü Fiyat sütunundaki sayıların ortalamasını alır.
- _$id alanı null olarak belirlendiğinde, tüm belgeler gruplandırılır.
- Yeni belge, sadece bir alan olan avgPrice'ı içerir. Bu alan, belirli bir aralıktaki sütundaki sayıların ortalama değerini içerir.
$project
$project operatörü, MongoDB Aggregate Framework içindeki projeksiyon operatörüdür. Bu operatör, belirli bir belge koleksiyonu içindeki belge alanlarını seçmek için kullanılır. $project, belge alanlarını yeniden adlandırabilir veya yeni alanlar oluşturabilir. Özellikle, Aggregate Framework ile yapılan sorgularda birden fazla kaynak kullanıldığında, özel alan adları oluşturmak için $project operatörü kullanılabilir.
$project operatörü genellikle $match ve $group operatörleri ile birlikte kullanılır. Örneğin, "employees" koleksiyonu içinde sadece belirli alanları seçmek istiyoruz. Ayrıca, yaşı 30'dan küçük olan tüm çalışanları gruba göre toplamak istiyoruz. Bu iki işlemi birleştirmek için aşağıdaki $project pipeline'ını kullanabiliriz.
Pipeline | Açıklama |
---|---|
$match | {age:{$lt:30}} |
$project | {name:1, age:1, title:1, _id:0} |
$group | {_id:"$title", count:{$sum:1}} |
- $project pipeline'ında, name, age, title, ve _id alanları seçildi.
- _id alanının değeri 0 yapılarak, bu alan pipeline'dan çıkarıldı.
- $group pipeline'ında, title alanına göre gruplandırma yapıldı ve her bir gruptaki çalışan sayısı sayıldı.
$project operatörü, aynı zamanda hesaplama veya bölme işlemleri yapmak için kullanılabilir. Örneğin, "employees" koleksiyonu içindeki maaşları hesaplamak için $project operatörünü kullanabiliriz.
Aşağıdaki örnekte, "employees" koleksiyonu içindeki brüt maaşları net maaşa dönüştürmek için $project operatörü kullanılmıştır.
Pipeline | Açıklama |
---|---|
$project | {name:1, salary:1, net_salary: {$subtract: ["$salary", {$multiply: ["$salary", 0.1]}]}} |
- $subtract ve $multiply operatörleri kullanılarak, brüt maaştan kesintiler çıkarılarak net maaş hesaplanmıştır.
$project operatörü, MongoDB Aggregate Framework içinde oldukça kullanışlı bir operatördür. Belge alanlarını seçmek, yeniden adlandırmak veya yeni alanlar oluşturmak için kullanılabilir. Hesaplama veya bölme işlemleri yapmak için de kullanılabilir. Yalnızca hangi alanların seçileceğine karar vermekle kalmaz, aynı zamanda sıralama, gruplama ve birleştirme işlemleri de yapar.
$slice
$slice operatörü, belirlenmiş bir dizinin belli bir bölümünü alarak yeni bir dizi oluşturmanızı sağlar. Bu operatör sayesinde projede bulunan veriler arasından istediğiniz sayıda veriyi belirleyerek, istenilen gibi bir dizi oluşturabilirsiniz.
Örneğin elimizde bir projede çalışanların yaptığı işlerin tarihsel verileri bulunuyor olsun. İstediğimiz, her çalışan için son 3 aydaki yaptığı işleri görüntülemek olsun. Bu durumda, $slice operatörünü kullanarak, verilerimiz üzerinde kolay bir şekilde işlemler yapabiliriz. Örnek bir $slice operatörü kullanımı şu şekildedir:
Operasyon | Parametreler |
---|---|
$slice | [ veriseti_aggregate, pozisyon, eleman_sayisi ] |
Verilerimizde, pozisyon parametresi ile başlangıç index'i belirtilirken, eleman_sayisi parametresi ile alınacak eleman sayısı belirtilmektedir. Bu değerler projeden projeye farklılık gösterse de operasyonun kullanımı aynıdır.
Bu şekilde değişken kullanarak $slice operatörüyle oluşturacağınız dizilerde, tarihsel iş verileri, çalışanların özellikleri veya diğer belirli veriler hakkında gerekli bilgileri alarak projenin genelinde hızlı bir şekilde işlem yapabilirsiniz.
$concat
$concat operatörü, MongoDB Aggregate Framework'te kullanılan bir operatördür ve birden fazla alanın değerlerini birleştirir. Bu operatör, birden çok alanın içindeki verileri birleştirerek tek bir alan oluşturur. İster tamsayı, ister metin, isterse tarih veya saat olsun, $concat operatörü, birden fazla alan değerini birleştirerek ihtiyaç duyulan bir alana ekler.
Örneğin, bir veri tabanında kullanıcı adı ve soyadı gibi iki ayrı alan varsa, bu alanlar birleştirilerek tam ad alanı oluşturulabilir. $concat operatorü, verileri kullanarak kolayca yeni bir alana aktarabilirsiniz.
Aşağıdaki tablo, $ concat operatörünün kullanımına ilişkin bir örnektir:
first_name | last_name | full_name |
---|---|---|
Ahmet | Demir | Ahmet Demir |
Merve | Yılmaz | Merve Yılmaz |
Can | Çelik | Can Çelik |
Bu tablodaki full_name alanı, $concat operatörü kullanılarak first_name ve last_name alanları birleştirilerek oluşturuldu. Bu örnek, iki alanın nasıl birleştirileceğini gösterir. Verilen örnekten yararlanarak, $concat operatörünü farklı şekillerde kullanarak birden fazla alan değerini birleştirebilirsiniz.
Aggregate Framework ile Sıralama
MongoDB Aggregate Framework, büyük ve karmaşık veritabanı yapılarında veri analizine ve işleme imkanı veren bir araçtır. Aggregate Framework verilerin gruplandırılması, filtrelenmesi, sıralanması ve işlenmesi gibi temel işlemleri gerçekleştirebilen bir yapıya sahiptir. Aggregate Framework kullanarak verileri sıralamanın birkaç farklı yolu vardır.
Aggregate Framework'te $sort ve $limit operatörleri, verilerin sıralanması ve sınırlandırılması için kullanılır. $sort operatörü, belirtilen alanlara göre verileri artan veya azalan sıraya sokar. Veriler aynı değere sahipse, $sort operatöründe kullanılan diğer kriterlere göre sıralama yapar. $limit operatörü ise sıralanacak veri sayısını belirler.
Bunların yanı sıra, $project operatörünün altında kullanılabilecek $slice operatörü de verilerin sınırlandırılması için kullanılabilir. $slice, belirli bir alana verilen başlangıç ve bitiş indeksleri arasındaki verileri seçer ve geri kalanlarını atar.
Aynı zamanda, $group operatörünün altındaki $sort operatörü, gruplandırılan verileri belirli özelliklere göre sıralayabilir. Yine $group operatörü altında kullanılabilen $sum ve $avg operatörleriyle verilerin belirli özelliklerine göre toplama ve ortalama alma işlemi gerçekleştirilebilir.
Özetle, MongoDB Aggregate Framework, verilerin sıralanması ve işlenmesinde oldukça etkili ve kullanışlı bir araçtır. Veri analizi ve işleme işlemleri için Aggregate Framework'in geniş operatör yelpazesinden faydalanılarak, veriler kolaylıkla sıralanabilir ve sınırlandırılabilir.
$sort
$sort operatörü, Aggregate Framework içerisinde verilerin sıralanmasını sağlar. Sıralama işlemi, verilerin belirli bir sütuna göre artan veya azalan şekilde dizilmesini yapar. Bu sayede verileri daha rahat bir şekilde okuyabilir ve manipüle edebilirsiniz.
Örnek vermek gerekirse, bir e-ticaret sitesindeki ürünlerin fiyatına göre sıralanması gerektiğini düşünelim. Bu durumda $sort operatörünü kullanarak sıralama işlemini gerçekleştirebilirsiniz. Aşağıdaki örnekte, products koleksiyonundaki fiyat verileri sıralanmıştır:
Ürün İsmi | Fiyat |
---|---|
Ürün A | 50 TL |
Ürün B | 100 TL |
Ürün C | 200 TL |
Yukarıdaki örnekte, $sort operatörü ile fiyata göre veriler artan şekilde sıralanmıştır. Bunun için, aşağıdaki kod kullanılmıştır:
db.products.aggregate([ { $sort: { fiyat: 1 } }])
Burada, $sort operatöründe kullanılan fiyat:1 ifadesi, fiyat sütununa göre artan şekilde sıralama yapılacağını belirtir. Bu sayede, sıralanmış bir veri elde edilir.
$sort operatörü kullanırken, verileri azalan şekilde sıralamak için -1 parametresi kullanılabilir. Ayrıca, sıralamak istediğiniz Birden fazla sütun varsa, $sort operatörü içerisinde birden fazla parametre kullanabilirsiniz. Örneğin:
db.products.aggregate([ { $sort: { fiyat: 1, kategori: 1 } }])
Bu durumda, fiyata göre artan şekilde sıralama yapıldıktan sonra kategorilere göre de artan şekilde sıralama yapılır. Bu sayede, daha detaylı bir sıralama işlemi gerçekleştirilir.
$limit
Aggregate Framework kullanarak MongoDB verilerini analiz ederken, $limit operatörü veri kümesini sınırlandırmak için kullanışlıdır. Belirtilen sayıda belge döndürür ve bu nedenle sorgunun verimliliğini artırır. Sınırlama işlemi öncesi veya sonrasında birden fazla işlem yapılabilir.
Bir örnek olarak, sales adlı bir koleksiyondaki belgelerin $limit işlemi kullanılarak son bir yıllık satışlara ayrılmasını gösterelim. Aşağıdaki gibi bir pipeline kullanarak işlemleri gerçekleştiriyoruz:
İşlem | Kod |
---|---|
$match | { salesDate : { $gte : ISODate("2020-01-01")} } |
$sort | { salesDate : 1 } |
$limit | 365 |
- $match işlemi ile, sales koleksiyonundaki tüm satışları filtreliyoruz. Satış tarihleri 1 Ocak 2020'den büyük veya eşit olanları seçiyoruz.
- $sort işlemi ile, tarihlerin chronolojik olarak sıralanmasını sağlıyoruz.
- $limit işlemi ile, son bir yıllık satışları kapsayan ilk 365 belgeyi seçiyoruz.
Yukarıdaki pipeline, son bir yıllık satışları içeren 365 belgenin döndürüldüğü bir sonuç verir. $limit operatörü sorgunun verimliliğini artırdı ve işlemlerin daha hızlı tamamlanmasına neden oldu.
Aggregate Framework'te Join
Aggregate Framework, verileri birleştiren Join işlemlerini gerçekleştirmek için $lookup operatörünü kullanır. Bu operatör, birleştirme işlemi yapmak için iki koleksiyon arasında Referans alanı belirler ve anahtar öğeleri eşleştirir.
$lookup operatörü, aggregate pipeline'ındaki $match, $group, $sort, $limit gibi diğer operatörlerle birlikte kullanılabilir. Bu operatör, kullanıcının belirlediği koşullara göre ana koleksiyondan uygun kayıtları siler ve birleştirme sonucu olarak yeni dokümanlar oluşturur.
Aşağıdaki örnekte iki koleksiyon (orders, inventory) arasında Join işlemi gerçekleştirildi. Bu işlemde orders koleksiyonundaki order_id alanı, inventory koleksiyonundaki order_id alanı ile eşleştirildi.
```javascript{ $lookup: { from: "inventory", localField: "order_id", foreignField: "order_id", as: "inventory_docs" }}```
Yukarıdaki operatör, "orders" koleksiyonundaki her kayıt için "inventory" koleksiyonunu başvurulan koleksiyon olarak kullanır. "orders" koleksiyonundaki order_id alanı, "inventory" koleksiyonundaki order_id alanı ile eşleştirilir. Eşleşen her belge, "inventory_docs" olarak yeni bir koleksiyonda saklanır.
Aggregate Framework, MongoDB veri yönetimi için güçlü bir araçtır. Özellikle $lookup gibi operatörlerin kullanımı sayesinde, veriler arasında birleştirme işlemleri kolaylıkla yapılabilmektedir. Bu sayede, verilerin daha etkili bir şekilde yönetilmesi mümkündür.
$lookup
$lookup operatörü, MongoDB'nin Aggregate Framework özelliği ile birleştirme işlemleri yapmak için kullanılır. Bu işlemi yaparken birden fazla koleksiyonu birleştirmek mümkündür. $lookup operatörü, $match, $group ve $project operatörleriyle birlikte sıkça kullanılır.
$lookup operatörünün kullanımı için iki anahtar sözcük gerekmektedir; yabancı koleksiyonun adı ve birleştirmenin gerçekleştirileceği alan. İki koleksiyon arasındaki birleştirme işlemi, yabancı koleksiyondaki belgelere göre yapılır.
Aşağıdaki örnekte, "product" ve "order" olmak üzere iki koleksiyon var. Bu koleksiyonlardan "product" koleksiyonunda yer alan "product_id" alanı, "order" koleksiyonundaki "items.product_id" alanıyla eşleştirilir. İki koleksiyon arasındaki ilişki, "as" anahtar kelimesiyle tanımlandı.
product | order | |
---|---|---|
| => |
|
Ardından, $lookup operatörü kullanılarak iki koleksiyon birleştirilir.
db.getCollection("product").aggregate([ { $lookup: { from: "order", localField: "_id", // "product" koleksiyonundaki "_id" alanı foreignField: "items.product_id", // "order" koleksiyonundaki "items.product_id" alanı as: "orders" } } ])
Yukarıdaki örnekte, $lookup operatörü "order" koleksiyonuyla birleştirilir ve "orders" olarak kaydedilir. Bu sayede, "product" koleksiyonundaki her belgeye, o belgeye ait siparişler "orders" alanında gösterilir.