gpt4 book ai didi

mongodb - 如何按日期获取唯一约束的最早记录?

转载 作者:可可西里 更新时间:2023-11-01 09:13:56 25 4
gpt4 key购买 nike

我有一个集合,其中包含两个对这个问题很重要的字段:一个类别和一个日期(为简单起见,我将只使用“昨天”和“今天”)。

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

现在,我正在修改一个查询,该查询将首先查询类别,然后按日期降序排序并限制为 1 个结果(按日期为我提供单个类别的最早记录。

db.collection("things").find({ category: 1 }).sort({ date: -1 }).limit(1)

// Result
{ category: 1, date: ISODate("today") }

效果很好。但是,我想要每个类别的最早记录。这意味着我不能使用限制运算符(因为我不知道在任何给定时间点有多少类别)并且我不能保证每个类别的每一天都有日期记录。

// Expected Result
{ category: 1, date: ISODate("today") }
{ category: 2, date: ISODate("today") }
{ category: 3, date: ISODate("yesterday") }

我玩过 distinct,但没有成功。

如何在单个查询中获取每个类别的最早日期的记录?

最佳答案

您可以按类别$group 并使用$max 获取最早的日期:

db.things.aggregate([
{
$group: {
_id: "$category",
date: { $max: "$date" }
}
},
{
$project: {
_id: 0,
category: "$_id",
date: 1
}
}
])

关于mongodb - 如何按日期获取唯一约束的最早记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52281209/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com