node.js - 如何合计计算字段的每个枚举的总数?
问题描述
你好我有这个函数,我想计算一个数组中每个状态的订单数,代码是
let statusEnum = ["pending", "canceled", "completed"];
let userOrders = await Orders.aggregate([
{
$match: {
$or: [
{ senderId: new mongoose.Types.ObjectId(req.user._id) },
{ driverId: new mongoose.Types.ObjectId(req.user._id) },
{ reciverId: new mongoose.Types.ObjectId(req.user._id) },
],
},
},
{
$group: {
_id: null,
totalOrders: { $sum: 1 },
totalPendingOrders: "??", //I want to determine this for each order status
totalCompletedOrders: "??",
totalCanceledOrders: "??",
},
},
]);
所以我可以添加一个 $match 并使用 {status : "pending"} 但这将只过滤待处理的订单,我还可以映射状态枚举并替换每个元素而不是上面的“待处理”,然后将每个迭代推入另一个数组,但这看起来很乱,有没有其他方法可以只使用一个聚合来计算每个订单状态的总计?
谢谢
解决方案
您可以按使用方式使用组,但有条件
db.collection.aggregate([
{
$group: {
_id: null,
totalPendingOrders: {
$sum: { $cond: [ { $eq: [ "$status", "pending" ] }, 1, 0 ] }
},
totalCompletedOrders: {
$sum: { $cond: [ { $eq: [ "$status", "completed" ] }, 1, 0 ] }
},
totalCanceledOrders: {
$sum: { $cond: [ { $eq: [ "$status", "canceled" ] }, 1, 0 ] }
}
}
}
])
工作蒙戈游乐场
推荐阅读
- python - Scrapy、Selenium、jQuery Dropdown 与具有 style="display: none;" 的选择标签的行为不一致
- c - 泛型交换 c 函数
- sql-server - 创建内存优化表类型
- r - 如何在 R 中运行 ComBat 函数时解决“dim(X) must have a positive length”
- python-3.x - ImportError:没有使用 MAC VSCODE 的模块命名烧瓶
- python - 基于其他两列的唯一元素(分组)的一列的 Numpy 平均值
- reactjs - React + typescript:propTypes.elementType 的 InferProps 抛出错误:JSX 元素类型“组件”没有任何构造或调用签名
- apache-spark - 可以在进行火花流式传输时移动输出文件,而不会使火花作业崩溃吗?
- python - 魔杖 Python 和剩下的 Image Magick 文件
- oracle - 过程 PL/SQL 中的光标