MongoDB 订单/销售聚合组每月总和 + 计数字段

2023-12-14

谁知道更好的解决方案来按日期和总计对订单进行分组并按来源进行计数。当然,我可以按来源分组,然后我仅获得该来源的总计,之后我可以更改结果以获得所需的结果。但我想知道是否可以通过一种简单的方式$group陈述。

Eg. ordersByApp = 1, ordersByWEB = 2

订单收集

{
 _id: 'XCUZO0',
 date: "2020-02-01T00:00:03.243Z"
 total: 9.99,
 source: 'APP'
},
{
 _id: 'XCUZO1',
 date: "2020-01-05T00:00:03.243Z"
 total: 9.99,
 source: 'WEB'
},
{
 _id: 'XCUZO2',
 date: "2020-01-02T00:00:03.243Z"
 total: 9.99,
 source: 'WEB'
}

我当前的聚合

Order.aggregate([
   {
     $group: {
        _id: {
           month: { $month: "$date",
           year: { $year: "$date" } 
        },
        total: {
           $sum: "$total"
        } 
     }
   }
])

目前结果

[
  {
    _id: { month: 01, year: 2020 },
    total: 19.98
  },
  {
    _id: { month: 02, year: 2020 },
    total: 9.99
  }
]

期望的结果,我怎样才能实现以下目标?

[
  {
    _id: { month: 01, year: 2020 },
    total: 19.98,
    countByApp: 1, <---
    countByWEB: 0, <---
  },
  {
    _id: { month: 02, year: 2020 },
    total: 9.99,
    countByWEB: 2, <---
    countByAPP: 0  <---
  }
]

您可以使用$cond像下面这样:

Order.aggregate([
    {
        $group: {
            _id: {
                month: { $month: "$date" },
                year: { $year: "$date" } 
            },
            total: { $sum: "$total" },
            countByApp: { $sum: { $cond: [ {$eq: [ "$source", "APP" ]} , 1, 0] } },
            countByWeb: { $sum: { $cond: [ {$eq: [ "$source", "WEB" ]} , 1, 0] } },
        }
    }
])

蒙戈游乐场

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB 订单/销售聚合组每月总和 + 计数字段 的相关文章

随机推荐

  • 使用 Win32 C++ 访问受保护的网络共享

    有没有办法使用 Win32 C API 访问登录 密码保护的网络共享 列出文件并获取其名称和创建日期 我不希望 samba 网络共享出现在我的资源管理器中 这可以通过 WNetAddConnection2 方法来完成 谢谢大家 虽然我同意本
  • 命名空间 clr-namespace <...> 中不存在名称 <...>

    我有一个小型 WPF 应用程序 过去可以正常编译 但现在不行了 我真的不能说它在哪一点停止了建设 前一天还好好的 第二天就不行了 这是项目结构 除了标准 net dll 之外 没有其他项目或外部引用 这是问题产生的用户控件
  • 在 C# 中定义 get 或 set

    朋友们 我在 C 类中使用 get 或 set 时遇到问题 当我使用 get 或 set 时给出错误 类中的无效令牌 请参阅下面的代码 我有这个问题 static int abcd get return abcd thanx 这是完整的代码
  • 使用自动增量字段插入触发器之前/之后

    我在使用插入触发器时遇到问题 该触发器应该修复表中的列 id auto increment int thread id int NULL 我想要实现的是设置thread id to id如果它被插入为 NULL 我失败了 因为 using
  • 如何给 ImageView 赋予六边形形状

    如何赋予六边形形状ImageView 可以用同样的方式做吗 如果是这样那怎么办 如果这不可能通过此方法实现 那么如何实现呢
  • 如何让k8s cpu和内存HPA协同工作?

    我正在使用 k8s HPA 模板作为 CPU 和内存 如下所示 apiVersion autoscaling v1 kind HorizontalPodAutoscaler metadata name Chart Name cpu labe
  • 检索任意日期之前/之后最后更新的属性

    我有兴趣检索 WikiData 项目的属性 但前提是该属性是在某个日期之前或之后添加或修改的 所以我有这个SPARQL查询获取 Q24 的所有属性 SELECT itemLabel propLabel statement property
  • 是否可以在 Rust for 循环中声明变量的类型?

    C 示例 for long i 0 i lt 101 i 在 Rust 中我尝试过 for i i64 in 1 100 我可以轻松地声明一个let i i64 for循环之前的var 但我宁愿学习正确的方法来做到这一点 但这导致 erro
  • 在 JavaScript 中正确引用 ASP.NET 用户控件中的控件

    我有一个 ASP NET 用户控件 其中包含一个文本框控件和一个按钮控件 该用户控件将多次添加到我的网页中 我需要一段 JavaScript 只要文本框发生更改就会运行 并在文本框的值无效时禁用按钮 我的问题是 如何将 JavaScript
  • b 表中的 BootstrapVue 条件列

    如果当前用户是管理员 我只想显示我的专栏之一 我不知道如何使用 bootstrapVue 来做到这一点 有任何想法吗 这是基于 Troy 评论的片段 我已向名为的字段对象添加了一个自定义属性requiresAdmin 这不是标准的一部分Bo
  • 通过 bash 脚本与多个目录中的文件交互

    我生成了一个迭代多个 csv 文件的脚本 将相关文件转换为 UTF 8 bin bash cd home user prod charset text plain charset iso 8859 1 for file in csv do
  • 如何将字符串放入整数数组C++

    我有一个字符串 其中包含用户输入的内容 string userstr cout lt lt Please enter a string getline cin userstr 然后将该字符串存储在 userstr 中 然后我希望将该字符串存
  • 限制mysql中连接的行数

    因此 我想将两个表连接在一起 但对于第一个表中的每一行 我只想将其连接到另一个表中的前 8 个匹配行 并按该表中的一列排序 我可以使用任何聪明的语法 还是我需要弄乱子查询 看一下 如何在 SQL 中选择每组的第一个 最小 最大行 Secti
  • 如何将多个参数绑定到 MySQLi 准备好的语句

    我有可变数量的参数要插入 但出现错误 2031 No data supplied for parameters in prepared statement警告后Number of variables doesn t match number
  • 导入mysql数据中断,如何恢复?

    我使用导入了一个大型mysql数据库 mysql uroot ppassword dbName 数据库在处理过程中消失了 可能是由于几天后超时 有办法恢复吗 或者我运气不好 需要删除现有的数据库并重新导入 在命令行上使用 ignore 选项
  • 每行阅读 PDF

    如何阅读 PDF 文件line by line使用 iText5 for NET 我在互联网上搜索过 但我只找到了每页内容阅读 PDF 文件 请看下面的代码 public string ReadPdfFile object Filename
  • 如何使用 grid.arrange 排列任意数量的 ggplot?

    这是交叉发布在 ggplot2 谷歌组上的 我的情况是处理一个函数输出任意数量的图 取决于用户提供的输入数据 该函数返回 n 个图的列表 我想将这些图以 2 x 2 的形式排列 我正在努力解决以下同时存在的问题 我怎样才能灵活地获得任意 n
  • 如何使用git命名空间隐藏分支

    背景 我正在与一个大型团队合作 使用git用于版本控制 正常流程是 人们从 积压队列 中选择一张票 通过当地分支机构 即git checkout b my feature branch 进行多次提交 即git commit 将本地更改推送到
  • Firebase 令牌验证

    我有一个 PHP 后端和一个 Android 客户端 使用客户端 用户可以使用 Google 或 Facebook 均通过 Firebase 登录我的应用程序 我从以下位置获取令牌FirebaseUser并将其发送到我的服务器 很简单 第一
  • MongoDB 订单/销售聚合组每月总和 + 计数字段

    谁知道更好的解决方案来按日期和总计对订单进行分组并按来源进行计数 当然 我可以按来源分组 然后我仅获得该来源的总计 之后我可以更改结果以获得所需的结果 但我想知道是否可以通过一种简单的方式 group陈述 Eg ordersByApp 1