Bra*_*ley 5 mongodb mongodb-query
我有一个集合,其中包含对这个问题很重要的两个字段:类别和日期(为简单起见,我将仅使用“昨天”和“今天”)。
// Sample Data
{ category: 1, date: ISODate("yesterday") }
{ category: 1, date: ISODate("today") }
{ category: 2, date: ISODate("yesterday") }
{ category: 2, date: ISODate("today") }
{ category: 3, date: ISODate("yesterday") }
Run Code Online (Sandbox Code Playgroud)
现在,我正在修改一个查询,该查询将首先查询类别,然后按日期降序排序,并限制为 1 个结果(按日期为我提供单个类别的最早记录。
db.collection("things").find({ category: 1 }).sort({ date: -1 }).limit(1)
// Result
{ category: 1, date: ISODate("today") }
Run Code Online (Sandbox Code Playgroud)
效果很好。但是,我想要每个类别的最早记录。这意味着我无法使用限制运算符(因为我不知道在任何给定时间点有多少个类别),并且我不能保证每个类别每天都有日期记录。
// Expected Result
{ category: 1, date: ISODate("today") }
{ category: 2, date: ISODate("today") }
{ category: 3, date: ISODate("yesterday") }
Run Code Online (Sandbox Code Playgroud)
我玩过不同的游戏,但没有成功。
如何在单个查询中获取每个类别的最早日期的记录?
您可以$group通过category并使用$max来获取最早的日期:
db.things.aggregate([
{
$group: {
_id: "$category",
date: { $max: "$date" }
}
},
{
$project: {
_id: 0,
category: "$_id",
date: 1
}
}
])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1587 次 |
| 最近记录: |