Proposition: MongoDB-Abfrage bei Embedding

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 alle Einträge mit custId=42 aus der Order-Collection,
  • und wählen via $project die beiden Felder orderDate aus der order sowie orderlines.productId aus der eigebetteten orderline aus. Das Feld _id ignorieren wir.
db.Order
.find(
	{ 
		"custId": 42 
	},
	{
		"_id": 0,
		"orderDate": 1,
		"orderlines.productId": 1
	}
);

In diesem Fall haben wir für jede Orderline ein eignes Objekt. Um diese Objekte aufzulösen und ein Array von Produkt-IDs zu erhalten, könnten wir alternativ $map benutzen:

...
{
	"_id": 0,
	"orderDate": 1,
	"product_ids": {
		"$map": {
			"input": "$orderlines",
			"as": "op",
			"in": "$$op.productId"
		}
	}
}