Involvierte Definitionen
:Veranstaltung
: DEDSReferenz
: @stoerl2024 (p. 7)
⠀
Proposition: MongoDB-Abfrage bei beidseitigem Referencing
Es sei folgende Modellierung gegeben:
Unter Zuhilfenahme der folgenden Abfrage erhalten wir alle Bestellungen zu der Kundennummer 42 (inklusive allen beinhalteten Produkten sowie dem jeweiligen Bestelldatum).
Hierzu:
- suchen wir den
customer
mitcustId=42
aus derCustomer
-Collection,- holen über ein Lookup alle Einträge aus der
Order
-Collection, derenorderId
mit denorderIds
aus dem Arraycustomer.orders
übereinstimmen,- holen über ein geschachteltes Lookup alle
orderlines
aus derOrderline
-Collection, derenorderId
mitcustomer.orders.id
übereinstimmt,- und wählen schließlich via
$project
die beiden Felderorders.orderDate
aus derorder
sowieorders.orderlines.productId
aus derorderline
aus. Das Feld_id
ignorieren wir.// MongoDB // Ausgabe Bestellungen (Produkte, Bestelldatum) // des Kunden mit der Kundennummer 42 db.Customer.aggregate([ { "$match": { "custId": 42 } }, { "$lookup": { "from": "Order", "localField": "orders", "foreignField": "orderId", "as": "orders", "pipeline": [ { "$lookup": { "from": "Orderline", "localField": "orderlines", "foreignField": "id", "as": "orderlines" } } ] } }, { "$project": { "_id": 0, "orders.orderDate": 1, "orders.orderlines.productId": 1 } } ]);