Merhaba,
Önceki yazılarımdan NoSQL – MongoDB İşlevsel Fonksiyonlar ve Aggregate Operatörleri başlıklı makalemde “$lookup” operatörü ile MongoDB veritabanında iki farklı collectionın nasıl ilişkilendirildiğini incelemiştik. Bu içeriğimizde ise ilişkilendirme sonucunda eşleşmeyen verilerinde elde edilmesi için ne yapılması gerektiğini konuşacağız.
İçeriğimizi anlaşılabilir kılmak için “Employee” ve “Order” olmak üzere iki örnek collection üzerinden zenginleştireceğiz.
| Employee Collection | Order Collection |
|---|---|
Yukarıdaki collectionlara göz atarsanız eğer “Employee” collectionındaki “9” ve “10” idlerine sahip documentlere karşılık “Order” collectionında bir kayıt bulunmamaktadır.
router.get("/listOrder", (request, response, next) =>
employeeModel.aggregate
([
{
$lookup: {
from: "order",
localField: "_id",
foreignField: "employeeId",
as: "orderList"
}
},
{
$unwind: "$orderList"
},
{
$project: {
orderNumber: "$orderList.orderNumber",
name: 1,
surName: 1
}
}
])
.then(data => response.render("home", { data: data }))
.catch(error => response.send("Veriler listelenirken beklenmeyen bir hatayla karşılaşıldı."))
);
Dolayısıyla bu şekilde bir ilişkilendirme sonucu sadece eşleşen kayıtların geldiğini görmekteyiz.
Eğer ki eşleşmeyen kayıtların gelmesini istyorsak aşağıdaki gibi “$unwind” operatöründe “preserveNullAndEmptyArrays” parametresine “true” vermeniz gerekmektedir.
router.get("/listOrder", (request, response, next) =>
employeeModel.aggregate
([
{
$lookup: {
from: "order",
localField: "_id",
foreignField: "employeeId",
as: "orderList"
}
},
{
$unwind: {
path: "$orderList",
preserveNullAndEmptyArrays: true
}
},
{
$project: {
orderNumber: "$orderList.orderNumber",
name: 1,
surName: 1
}
}
])
.then(data => response.render("home", { data: data }))
.catch(error => response.send("Veriler listelenirken beklenmeyen bir hatayla karşılaşıldı."))
);
Bu işlem neticesinde iki collection arasında eşleşen eşleşmeyen tüm kayıtların elde edildiğini görebilmekteyiz.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…
