繁体   English   中英

具有 2 个字段的 MongoDB 嵌套组聚合

[英]MongoDB nested group aggregation with 2 fields

我在 mongoDB 中有这样的集合调用条目

[
   {
      "date": "Mon Jul 07 2022 17:15:19",
      "name": "Banana",
      "calories": 100,
      "mealID": "62d55d4de4c92d6de31e22ad",
      "type": "Lunch"
    },
    {
      "date": "Mon Jul 07 2022 17:15:19",
      "name": "Buger",
      "calories": 300,
      "mealID": "62d55d4de4c92d6de31e22ad",
      "type": "Lunch"
     },
     {
      "date": "Mon Jul 07 2022 17:15:19",
      "name": "Coffee",
      "calories": 120,
      "mealID": "62d55d4de4c92d6de31e22",
      "type": "Break fast"
     },
     {
      "date": "Mon Jul 07 2022 17:15:19",
       "name": "Omlet",
       "calories": 70,
       "mealID": "62d55d4de4c92d6de31e22ad",
       "type": "Dinner"
      },

    ]

我试图将其与按日期和条目类型(午餐/快速刹车/晚餐)分组并汇总每天的卡路里。

[
   { _id: "Mon Jul 07 2022 17:15:19",
     entriesForTheDay: {
        "Dinner": {
        entries: [
          {name: "Omlet", calories: 70},
        ],
        count: 1,
      },
     "Break fast": {
        entries: [
          {name: "Coffee", calories: 120},
        ],
        count: 1,
      },
     "Lunch": {
        entries: [
          {name: "Banana", calories: 100},
          {name: "Buger", calories: 300},
        ],
        count: 2,
      }
     },
    totalCaloriesForThDay: 590
   }
]

我已经尝试过了,但我很确定可以与$type字段进行分组。

[
 {$group: {_id: '$date',
                   entries: {
                        $push: {
                            entry: {
                                name: '$name',
                                calories: '$calories',
                                type: '$type'
                            },
                           }
                        },
                        count: {
                            "$sum": 1
                        }
                    }
                },
]

询问

  • 按日期和类型分组,推送条目
  • 按日期分组,计算该日期的总卡路里

*常用的分组方式,如果要按field1,field2分组,又要按field2分组,可以先从多的分组开始,然后是更一般的分组

*输出几乎一样,但是字段中没有数据,输入可以完全按照您的意愿进行,但是在字段中保存数据通常不是一个好主意

玩蒙哥

aggregate(
[{"$group": 
   {"_id": {"date": "$date", "type": "$type"},
    "entries": {"$push": {"name": "$name", "calories": "$calories"}}}},
 {"$group": 
   {"_id": "$_id.date",
    "entriesForTheDay": 
     {"$push": 
       {"type": "$_id.type",
        "entries": "$entries",
        "count": {"$size": "$entries"}}},
    "totalCaloriesForThDay": {"$sum": {"$sum": "$entries.calories"}}}}])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM