Mongodb 如何查询时间段最长的对象?
我正在寻找一个可以返回最长时间段的对象的查询 因此,集合中的每个条目都具有Mongodb 如何查询时间段最长的对象?,mongodb,date,Mongodb,Date,我正在寻找一个可以返回最长时间段的对象的查询 因此,集合中的每个条目都具有startDate和finishDate属性,例如: 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 fini
startDate
和finishDate
属性,例如:
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
如何找到在
endDate
和startDate
之间具有最长时间段差异的两个项目?假设您的日期是String
s,并且由于它们的格式非常好,您可以使用Mongo 4.0
的转换器将它们转换为Date
对象。(对于早期版本,您可以使用)
一旦您有了日期,您就可以获得它们的差值,该差值提供了两个日期之间的毫秒数
因此,我们可以使用(或启动Mongo 4.2
)将此字段添加到每个文档中,并通过操作员在新的期间
字段上按降序对所有文档进行排序
最后,要仅保留期限最长的两个文档,可以应用一个阶段:
存储记录时计算差异,然后将该值存储在entityGreat Answer!中的另一个字段中:)
// { 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" }