【发布时间】:2021-11-28 02:19:13
【问题描述】:
假设我在 bookOrder 中有数据:
{
"_id" : ObjectId("615fc295257d6d7cf57a39fe"),
"orderId" : "2001",
"itemId" : [
"615fc232257d6d7cf57a39d4",
"615fc251257d6d7cf57a39e0"
],
"Discount" : 10
}
项目数据为:
{
"_id" : ObjectId("615fc232257d6d7cf57a39d4"),
"itemId" : "1001",
"Price" : 10.21
}
{
"_id" : ObjectId("615fc251257d6d7cf57a39e0"),
"itemId" : "1002",
"Price" : 100
}
我想计算折扣后订单的总价,
即总价为:100+10.21-10 = 100.21
为此,我尝试如下:
const data = await db.order.aggregate(
[
{
"$match": {
"orderId": orderId
}
},
{
"$lookup": {
"from": "item",
let: {
eid: "$itemId"
},
pipeline: [
{
"$match": {
$expr: {
$in: [
"$_id",
"$$eid"
]
}
}
},
],
"as": "items"
}
},
{
"$unwind": {
path: "$items"
}
},
]
)
所以,我得到的值是:
{
"orderId" : "2001",
"Discount":10,
"itemId":[{
"itemId" : "1001",
"Price" : 10.21
},
"itemId" : "1002",
"Price" : 100
]}
}
因此,我们不必遍历 itemId 价格并获得总太阳,然后从订单的折扣价格中减去,我们可以对 db 本身进行所有这些计算。
有什么方法可以让我只从数据库中查询总价,而不必获取数据并应用任何循环然后计算总价?
如果有人需要我的进一步解释,请告诉我。
【问题讨论】:
-
显然需要解释 ????你的问题几乎没有解释。也许更多一点?如果有任何错误信息,您也可以输入。
-
哈哈....是的,我已经用我得到的 O/P 和我的期望编辑了这个问题,希望现在有意义。
标签: javascript node.js mongodb mongoose