MongoDB嵌套2字段组聚合



我在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"
},
]

我试着按日期和输入类型(午餐/刹车快/晚餐)和$sum每天的卡路里来汇总这个组。

[
{ _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和also分组分组按field2,您可以从具有许多的组开始,然后是更通用的

*输出几乎是相同的,但是没有字段中的数据,in可以完全按照您的需要,但是在字段中保存数据通常不是一个好主意

Playmongo

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"}}}}])

最新更新