![](/img/trans.png)
[英]MongoDB: aggregation, $group by multiple (two) fields, with sorting (receiving latest) results
[英]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.