Здравствуйте, у меня есть две коллекции (продукт и заказ), и я пытаюсь создать агрегацию, которая приведет к тому, что все продукты будут перечислены для конкретного поставщика, а количество данных из определенного заказа будет добавлено к данным, если заказ содержит это конкретный продукт в нем.
Product Collection
{
_id: objectId,
supplierId: objectId1, // supplier 1
sku: "prod1"
},
{
_id: objectId,
supplierId: objectId1, // supplier 1
sku: "prod2"
},
{
_id: objectId,
supplierId: objectId1, // supplier 1
sku: "prod3"
}
{
_id: objectId,
supplierId: objectId2, // supplier 2
sku: "prod4"
},
{
_id: objectId,
supplierId: objectId2, // supplier 2
sku: "prod5"
}
Order Collection
{
_id: objectId5 // order 1
product: [{
_id: objectId,
supplierId: objectId1,
sku: prod1,
qty: 5
},
{
_id: objectId,
supplierId: objectId1,
sku: prod2,
qty: 1
}]
},
{
_id: objectId6 // order 2
product: [{
_id: objectId,
supplierId: objectId1,
sku: prod1,
qty: 100
}, ...
]
}
result should be
{
_id: objectId,
supplierId: objectId1, // supplier 1
sku: "prod1",
qty: 5
},
{
_id: objectId,
supplierId: objectId1, // supplier 1
sku: "prod2",
qty: 1
},
{
_id: objectId,
supplierId: objectId1, // supplier 1
sku: "prod3",
qty: 0 || null
}
Я не слишком далеко продвинулся в своей попытке, но записал какой-то псевдокод относительно того, где находится моя голова с этой проблемой. Я не сомневаюсь, что просто сделаю то, что нужно сделать здесь, но любая помощь будет принята с благодарностью.
product.aggregate([{$match: {supplierId: objectId1}},
{$lookup: {join order collection but only where orderId: objectId5}},
{$projection: {append qty where there is one append to each product that matches. prodcuts that don't match append 0 or null}}
])