Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Tahap $lookup dalam Kerangka Kerja Agregasi digunakan untuk melakukan gabungan luar kiri dengan koleksi lain. Ini memungkinkan Anda untuk menggabungkan dokumen dari koleksi yang berbeda berdasarkan kondisi tertentu. Operator ini berguna untuk memperkaya dokumen dengan data terkait dari koleksi lain tanpa harus melakukan beberapa kueri.
Syntax
{
$lookup: {
from: <collection to join>,
localField: <field from input documents>,
foreignField: <field from the documents of the "from" collection>,
as: <output array field>
}
}
Parameter-parameternya
| Pengaturan | Description |
|---|---|
from |
Nama koleksi yang akan digabungkan. |
localField |
Bidang dari dokumen input yang cocok dengan foreignField. |
foreignField |
Bidang dari dokumen dalam from koleksi yang cocok dengan localField. |
as |
Nama bidang array baru untuk ditambahkan ke dokumen input. Array ini berisi dokumen yang cocok dari from koleksi. |
Examples
Pertimbangkan dokumen sampel ini dari koleksi toko.
{
"_id": "0fcc0bf0-ed18-4ab8-b558-9848e18058f4",
"name": "First Up Consultants | Beverage Shop - Satterfieldmouth",
"location": {
"lat": -89.2384,
"lon": -46.4012
},
"staff": {
"totalStaff": {
"fullTime": 8,
"partTime": 20
}
},
"sales": {
"totalSales": 75670,
"salesByCategory": [
{
"categoryName": "Wine Accessories",
"totalSales": 34440
},
{
"categoryName": "Bitters",
"totalSales": 39496
},
{
"categoryName": "Rum",
"totalSales": 1734
}
]
},
"promotionEvents": [
{
"eventName": "Unbeatable Bargain Bash",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 6,
"Day": 23
},
"endDate": {
"Year": 2024,
"Month": 7,
"Day": 2
}
},
"discounts": [
{
"categoryName": "Whiskey",
"discountPercentage": 7
},
{
"categoryName": "Bitters",
"discountPercentage": 15
},
{
"categoryName": "Brandy",
"discountPercentage": 8
},
{
"categoryName": "Sports Drinks",
"discountPercentage": 22
},
{
"categoryName": "Vodka",
"discountPercentage": 19
}
]
},
{
"eventName": "Steal of a Deal Days",
"promotionalDates": {
"startDate": {
"Year": 2024,
"Month": 9,
"Day": 21
},
"endDate": {
"Year": 2024,
"Month": 9,
"Day": 29
}
},
"discounts": [
{
"categoryName": "Organic Wine",
"discountPercentage": 19
},
{
"categoryName": "White Wine",
"discountPercentage": 20
},
{
"categoryName": "Sparkling Wine",
"discountPercentage": 19
},
{
"categoryName": "Whiskey",
"discountPercentage": 17
},
{
"categoryName": "Vodka",
"discountPercentage": 23
}
]
}
]
}
Katakanlah kita memiliki koleksi lain ratings dengan dua dokumen.
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"rating": 5
}
{
"_id": "fecca713-35b6-44fb-898d-85232c62db2f",
"rating": 3
}
Contoh 1: Gabungkan dua koleksi untuk mencantumkan acara promosi untuk toko dengan peringkat 5
Kueri ini menggabungkan ratings koleksi dengan stores koleksi untuk mencantumkan peristiwa promosi yang terkait dengan setiap toko yang memiliki peringkat 5.
db.ratings.aggregate([
// filter based on rating in ratings collection
{
$match: {
"rating": 5
}
},
// find related documents in stores collection
{
$lookup: {
from: "stores",
localField: "_id",
foreignField: "_id",
as: "storeEvents"
}
},
// deconstruct array to output a document for each element of the array
{
$unwind: "$storeEvents"
},
// Include only _id and name fields in the output
{ $project: { _id: 1, "storeEvents.name": 1 } }
])
Kueri ini mengembalikan hasil berikut:
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"storeEvents": { "name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile" }
}
]
Contoh 2: Menggabungkan dua koleksi (peringkat dan penyimpanan) menggunakan variabel dari peringkat.
db.ratings.aggregate([
{
$match: { rating: 5 }
},
{
$lookup: {
from: "stores",
let: { id: "$_id" },
pipeline: [
{
$match: {
$expr: { $eq: ["$_id", "$$id"] }
}
},
{
$project: { _id: 0, name: 1 }
}
],
as: "storeInfo"
}
},
{
$unwind: "$storeInfo"
},
{
$project: {
_id: 1,
rating: 1,
"storeInfo.name": 1
}
}
])
Kueri ini mengembalikan hasil berikut:
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"rating": 5,
"storeInfo": {
"name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile"
}
}
]
Konten terkait
- Tinjau opsi untuk bermigrasi dari MongoDB ke Azure DocumentDB.
- Baca selengkapnya tentang kompatibilitas fitur dengan MongoDB.