首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对另一个组中的项目进行分组

对另一个组中的项目进行分组
EN

Stack Overflow用户
提问于 2020-06-02 09:59:42
回答 1查看 30关注 0票数 2

我想按类别对以下集合进行分组,并对其总值求和,然后在相同的结构上创建子类别属性,如果多个类别相等,则对子类别求和。

代码语言:javascript
运行
复制
[
  {
    "_id": 1,
    "date": ISODate("2019-10-10T00:00:00.000Z"),
    "description": "INTERNET BILL",
    "credit": "",
    "debit": "-100.00",
    "category": "home",
    "subcategory": "internet",
    "__v": 0
  },
  {
    "_id": 2,
    "date": ISODate("2019-10-10T00:00:00.000Z"),
    "description": "WATER BILL",
    "credit": "",
    "debit": "-150.00",
    "category": "home",
    "subcategory": "water",
    "__v": 0
  },
  {
    "_id": 3,
    "date": ISODate("2019-10-10T00:00:00.000Z"),
    "description": "MC DONALDS",
    "credit": "",
    "debit": "-30.00",
    "category": "food",
    "subcategory": "restaurants",
    "__v": 0
  },
{
    "_id": 4,
    "date": ISODate("2019-10-10T00:00:00.000Z"),
    "description": "BURGER KING",
    "credit": "",
    "debit": "-50.00",
    "category": "food",
    "subcategory": "restaurants",
    "__v": 0
  },
  {
    "_id": 5,
    "date": ISODate("2019-10-10T00:00:00.000Z"),
    "description": "WALMART",
    "credit": "",
    "debit": "-20.00",
    "category": "food",
    "subcategory": "groceries",
    "__v": 0
  },
]

可靠的输出:

代码语言:javascript
运行
复制
[
  {
    "_id": "home",
    "total": "-250.00",
    "subcategory" : [
     {"id": "internet", "total": "-100"},
     {"id": "water", "total": "-150"}
    ]
  },
  {
    "_id": "food",
    "total": "-100.00",
    "subcategory" : [
      {"id": "restaurants", "total": "-80"},
      {"id": "groceries", "total": "-20"}
    ]
  }
]

通过以下查询,我几乎实现了这一点,但我还没有找到对子类别求和的方法。

代码语言:javascript
运行
复制
db.getCollection('expenses').aggregate([
    {$match:
        {"date" : { "$gte" : new Date("11-10-2019"), "$lte": new Date("2019-10-11") }}
    },
    {$group: {
        _id: "$category",
        total: { $sum: { $toDouble: { $cond: { if: { $ne: [ "$debit", ""] }, then: "$debit", else: "$credit" } } } },
        subcategories: { $addToSet: {id: "$subcategory" }},

   }}
])
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 10:34:59

您可以$group两次(首先按子类别):

代码语言:javascript
运行
复制
db.collection.aggregate([
    {
        $group: {
            _id: { category: "$category", subcategory: "$subcategory" },
            total: { $sum: { $toDouble: "$debit" } }
        }
    },
    {
        $group: {
            _id: "$_id.category",
            total: { $sum: "$total" },
            subcategories: { $push: { id: "$_id.subcategory", total: "$total" } }
        }
    }
])

Mongo Playground

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62143631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档