具体见注释,如有不明白,可评论,可私信,可微信。
例子如下:
数据
{"_id":"1", "name":"A", "category":"分类1", "active":1, "createdate":"2021-11-10T09:00:08.170Z"},
{"_id":"2", "name":"B", "category":"分类1","active":1, "createdate":"2021-11-10T08:58:31.442Z"},
{"_id":"3", "name":"C", "category":"分类1", "active":1, "createdate":"2021-11-10T08:57:31.543Z"},
{"_id":"4", "name":"D", "category":"分类2", "active":2, "createdate":"2021-11-10T08:44:12.140Z"},
{"_id":"5", "name":"E", "category":"分类2", "active":1, "createdate":"2021-11-10T08:43:22.434Z"},
{"_id":"6", "name":"F", "category":"分类2", "active":1, "createdate":"2021-11-10T07:52:44.067Z"},
{"_id":"7", "name":"G", "category":"分类2", "active":1, "createdate":"2021-11-10T07:51:42.293Z"},
拿到每个分类的前两条数据
db..aggregate([
{$match: {active: 1,}},//匹配active为1的数据
{ "$sort": { "createdate": -1 } },//根据时间排序
{$group:{_id:"$category",items:{$push:"$$CURRENT"}}},//根据分类,找到分类下的数据列表$$CURRENT也可$$ROOT
{ "$project": {
"items": {"$slice": [ "$items", 2 ] }//每组数据有3条
}},
{
"$project": {
"items._id": 0,
}
},//去掉不必要的字段
{ "$sort": { "_id": -1 } },//再根据分类排序,上面把分类赋予了_id,所以此处是_id排序
])
输出结果
[
{
"_id":"分类1",
"items":[
{ "name":"A", "category":"分类1", "active":1, "createdate":"2021-11-10T09:00:08.170Z"},
{"name":"B", "category":"分类1","active":1, "createdate":"2021-11-10T08:58:31.442Z"},
]
},
{
"_id":"分类2",
"items":[
{ "name":"E", "category":"分类2", "active":1, "createdate":"2021-11-10T08:43:22.434Z"},
{"name":"F", "category":"分类2", "active":1, "createdate":"2021-11-10T07:52:44.067Z"},
]
}
]