I have a several collections:
User {
items: [ObjectID(n)]
}
Items {
_id: ObjectID(n),
name: '',
categories: [ObjectID(n)]
}
Categories {
_id: ObjectID(n),
name: ''
}
I Use query below to lookup items:
db.Users.aggregate(
[
{
$match: {
_id: ObjectId("n")
}
}, {
$unwind: "$items"
}, {
$lookup: {
from: "Items",
localField: "items",
foreignField: "_id",
as: "items"
}
}, {
$unwind: "$items"
}, {
$group: {
_id: "$_id",
items: { $push: "$items" }
}
}
]
)
Now I populate Users.items but i cannot deal with categories inside items. I Use code below to get categories.
db.Users.aggregate(
[
{
$match: {
_id: ObjectId("n")
}
}, {
$unwind: "$items"
}, {
$lookup: {
from: "Items",
localField: "items",
foreignField: "_id",
as: "items"
}
}, {
$unwind: "$items"
}, {
$unwind: "$items.categories"
}, {
$lookup: {
from: "Categories",
localField: "items.categories",
foreignField: "_id",
as: "items.categories"
}
}, {
$group: {
_id: "$_id",
items: { $push: "$items" }
}
}
]
)
But I cannot perform correct grouping.
Any ideas how to properly group categories inside items?