gpt4 book ai didi

mongodb - 如何查询最长时间段的对象?

转载 作者:可可西里 更新时间:2023-11-01 10:36:20 26 4
gpt4 key购买 nike

我正在寻找一个可以返回最长时间段对象的查询。

因此集合中的每个条目都具有 startDatefinishDate 的属性,例如:

id: 1  startDate: 2019-01-22 23:23:47  finishDate: 2019-01-22 20:58:47 
id: 2 startDate: 2019-01-22 23:12:47 finishDate: 2019-01-22 11:58:47
id: 3 startDate: 2019-01-22 23:23:47 finishDate: 2019-01-22 13:58:47

如何找到 endDatestartDate 之间时间差最长的 2 个项目?

最佳答案

假设您的日期是 String,并且由于它们的格式非常好,您可以使用 Mongo 4.0 将它们转换为 Date 对象s $toDate转换器。 (对于早期版本,您可以使用 $dateFromString )

一旦你有了日期,你就可以用 $subtract 获得它们的差异提供两个日期之间的毫秒数。

因此,我们可以使用 $addFields 将此字段添加到每个文档中(或 $setMongo 4.2 开始),因此通过 $sort 在这个新的 period 字段上按降序对所有文档进行排序运营商。

最后,要只保留周期最长的两个文件,可以申请$limit阶段:

// { id: 1, startDate: "2019-01-22 20:58:47", finishDate: "2019-01-22 23:23:47" }
// { id: 2, startDate: "2019-01-22 11:58:47", finishDate: "2019-01-22 23:12:47" }
// { id: 3, startDate: "2019-01-22 13:58:47", finishDate: "2019-01-22 23:23:47" }
db.collection.aggregate([
{ $addFields: {
period: { $subtract: [ { $toDate: "$finishDate" }, { $toDate: "$startDate" } ] }
} },
{ $sort: { period: -1 } },
{ $limit: 2 }
])
// { id: 2, period: NumberLong(40440000), startDate: "2019-01-22 11:58:47", finishDate: "2019-01-22 23:12:47" }
// { id: 3, period: NumberLong(33900000), startDate: "2019-01-22 13:58:47", finishDate: "2019-01-22 23:23:47" }

关于mongodb - 如何查询最长时间段的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56739767/

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