【发布时间】:2021-03-17 02:13:21
【问题描述】:
按以下格式说出集合存储数据。每天都会在集合中添加一个新条目。日期采用 ISO 格式。
|id|dt|data|
---
|1|2021-03-17|{key:"A", value:"B"}
...
|1|2021-03-14|{key:"A", value:"B"}
...
|1|2021-02-28|{key:"A", value:"B"}
|1|2021-02-27|{key:"A", value:"B"}
...
|1|2021-02-01|{key:"A", value:"B"}
|1|2021-01-31|{key:"A", value:"B"}
|1|2021-01-30|{key:"A", value:"B"}
...
|1|2021-01-01|{key:"A", value:"B"}
|1|2020-12-31|{key:"A", value:"B"}
...
|1|2020-11-30|{key:"A", value:"B"}
...
我需要一个查询方面的帮助,该查询提供给定时间段内每个月的最后一天。以下是我能够执行的查询,它没有给出当月的最后一天,因为我按日、月和年对其进行排序。
db.getCollection('data').aggregate([
{
$match: {dt: {$gt: ISODate("2020-01-01")}
},
{
$project: {
dt: "$dt",
month: {
$month: "$dt"
},
day: {
$dayOfMonth: "$dt"
},
year: {
$year: "$dt"
},
data: "$data"
}
},
{
$sort: {day: -1, month: -1, year: -1}
},
{ $limit: 24},
{
$sort: {dt: -1}
},
])
我追求的结果是:
|1|2021-03-17|{key:"A", value:"B"}
|1|2021-02-28|{key:"A", value:"B"}
|1|2021-01-31|{key:"A", value:"B"}
|1|2020-12-31|{key:"A", value:"B"}
|1|2020-11-30|{key:"A", value:"B"}
...
|1|2020-01-31|{key:"A", value:"B"}
【问题讨论】:
-
你能用日期时间对象查询iso格式吗?如果是这样,这可能是一个 or 查询,每个查询都是
$gte该月的最后一天和$lt该月的第一天。 -
我更新了我的问题。我需要集合中本月的最后一个条目。
-
你需要数据库中每个月的最后一条记录,还是每个月最后一天的数据?