$lookup (aggregazione)
SI APPLICA A: MongoDB vCore
La $lookup
fase in Aggregation Framework viene usata per eseguire left outer join con altre raccolte. Consente di combinare documenti di raccolte diverse in base a una condizione specificata. Questo operatore è utile per arricchire i documenti con dati correlati di altre raccolte senza dover eseguire più query.
Sintassi
La sintassi per la $lookup
fase è la seguente:
{
$lookup: {
from: <collection to join>,
localField: <field from input documents>,
foreignField: <field from the documents of the "from" collection>,
as: <output array field>
}
}
Parametri
Descrizione | |
---|---|
from |
Nome della raccolta con cui eseguire il join. |
localField |
Campo dei documenti di input corrispondenti all'oggetto foreignField . |
foreignField |
Campo dei documenti dell'insieme from che corrispondono a localField . |
as |
Nome del nuovo campo della matrice da aggiungere ai documenti di input. Questa matrice contiene i documenti corrispondenti dell'insieme from . |
Esempio
Si supponga di avere una ratings
raccolta con due documenti.
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"rating": 5
}
{
"_id": "fecca713-35b6-44fb-898d-85232c62db2f",
"rating": 3
}
Si esaminerà ora l'utilizzo con il codice JSON di esempio seguente nella raccolta stores.
{
"_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"
]
}
Si vuole unire la ratings
raccolta alla stores
raccolta per elencare gli eventi promozionali correlati a ogni negozio con una valutazione di 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 } }
])
Questa query restituirà il documento seguente.
[
{
"_id": "7954bd5c-9ac2-4c10-bb7a-2b79bd0963c5",
"storeEvents": { "name": "Lakeshore Retail | DJ Equipment Stop - Port Cecile" }
}
]
Limiti
- let non è supportato come parte della pipeline
Contenuto correlato
- Revisionare le opzioni per eseguire la migrazione da MongoDB ad Azure Cosmos DB per MongoDB (vCore)
- Maggiori informazioni sulla compatibilità delle funzionalità con MongoDB