本文介绍了MongoDB订单/销售汇总组每月总计+计数字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

谁知道更好的解决方案,可以按日期对订单进行分组,对合计总额和源进行计数.当然,我可以按来源分组,然后仅获得该来源的总数,之后可以更改结果以得到所需的结果.但是我想知道是否可以用一个简单的 $ group 语句.

Who knows a better solution to group Orders by date and sum total and count by source. Of course I can group by Source and then I get only totals for this source only, I can alter the result thereafter to get the desired result. But I would like to know if it is possible in one simple $group statement.

例如. 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
  }
]

期望的结果,如何实现以下目标?

Desired result, How can I achieve the below?

[
  {
    _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] } },
        }
    }
])

蒙戈游乐场

这篇关于MongoDB订单/销售汇总组每月总计+计数字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-26 06:24