我试图聚合结果,但我需要每个日期/一天只包含一个结果。下面是我的查询当前的样子:
.aggregate([
{
$lookup: {
from: 'community_stats',
as: 'stats',
let: { id: '$_id' },
pipeline: [
{
$match: {
$expr: { $eq: ['$community', '$$id'] },
},
},
{ $sort: { date: -1 } },
{ $limit: 5 },
],
},
},
])
它返回如下数组:
stats: [
{
_id: new ObjectId("613d42f20e8023815b8f0ad3"),
community: new ObjectId("6138ef0a00895c22c6cd3b68"),
data: [Object],
date: 2021-09-11T23:59:46.998Z
},
{
_id: new ObjectId("613b784e564ee6ad3e2dbb14"),
community: new ObjectId("6138ef0a00895c22c6cd3b68"),
data: [Object],
date: 2021-09-10T15:22:54.764Z
},
{
_id: new ObjectId("6139f9487e4c964ef9dafd11"),
community: new ObjectId("6138ef0a00895c22c6cd3b68"),
data: [Object],
date: 2021-09-09T12:08:40.198Z
},
{
_id: new ObjectId("6139f6eac570e66aa60a8b5f"),
community: new ObjectId("6138ef0a00895c22c6cd3b68"),
data: [Object],
date: 2021-09-09T11:58:34.463Z
}
]
有人知道怎么做吗?
发布于 2021-09-12 06:21:20
您只需要添加一个$group阶段,按照日期对比赛进行分组,如下所示:
db.collection.aggregate([
{
$lookup: {
from: "community_stats",
as: "stats",
let: {
id: "$_id"
},
pipeline: [
{
$match: {
$expr: {
$eq: [
"$community",
"$$id"
]
}
}
},
{
$group: {
_id: {
year: {
"$year": "$date"
},
month: {
"$month": "$date"
},
day: {
"$dayOfMonth": "$date"
},
},
first: {
$first: "$$ROOT"
}
}
},
{
"$replaceRoot": {
"newRoot": "$first"
}
},
{
$sort: {
date: -1
}
},
{
$limit: 5
}
]
}
}
])
在我的示例中,使用$first
从每天选择第一个文档,但是,如果需要更改,则可以使用不同的操作符/逻辑。
https://stackoverflow.com/questions/69148260
复制相似问题