#node.js #mongodb #e-commerce
#node.js #mongodb #электронная коммерция
Вопрос:
У меня есть корзина покупок, я пытаюсь подсчитать общую стоимость, но все, что я пытаюсь, похоже, не работает:
Пример коллекции корзины:
{
"hash": "xxxxx",
"items": [
{
productCode: 'xxx',
qty: 4
}
]
}
Пример коллекции продуктов:
{
[
{
productCode: 'xxx',
price: 299
}
]
}
Мой текущий код:
const basket = await this.collection.aggregate([
{ $match: { hash } }, // Find the shopping cart with the hash
{ $lookup: { from: 'products', localField: 'items.productCode', foreignField: 'productCode', as: 'products' } },
{ $limit: 1 },
{ $project: {
_id: false,
qtys: '$items',
products: '$products'
// totalCost // Output the total cost of all the products
}
}
]).toArray();
Мне нужно рассчитать цену, умножив ее на кол-во в данных товаров … есть идеи, что делать?
Спасибо
Комментарии:
1. Пример документов MongoDB для
$multiply
, похоже, именно то, что вы пытаетесь сделать: docs.mongodb.com/manual/reference/operator/aggregation/multiply /…
Ответ №1:
Вы можете добиться этого несколькими различными способами, я считаю, что проще всего сделать это в $unwind
поле товара корзины, выполнить расчет, а затем восстановить структуру следующим образом:
db.basket.aggregate([
{ $match: { hash } },
{
$limit: 1 // why do we need this? isn't the hash unique?
},
{
$unwind: "$items"
},
{
$lookup: {
from: "products",
localField: "items.productCode",
foreignField: "productCode",
as: "products"
}
},
{
$unwind: "$products"
},
{
$group: {
_id: "$_id",
items: {
$push: "$items"
},
products: {
$push: "$products"
},
totalCost: {
$sum: {
"$multiply": [
"$products.price",
"$items.qty"
]
}
}
}
},
{
$project: {
_id: false,
}
}
])