我有这样的集合:
{ "_id" : ObjectId("963fae9d93f4d930c98e269d"), "myDate":ISODate("2017-02-05T05:00:00.000Z"), "otherData":"blablabla" }, { "_id" : ObjectId("963fae9d93f4d930c98e269d"), "myDate":ISODate("2017-02-05T14:00:00.000Z"), "otherData":"blablabla" }, { "_id" : ObjectId("963fae9d93f4d930c98e269d"), "myDate":ISODate("2017-03-05T02:00:00.000Z"), "otherData":"blablabla" }, { "_id" : ObjectId("963fae9d93f4d930c98e269d"), "myDate":ISODate("2017-03-05T19:00:00.000Z"), "otherData":"blablabla" }
给定当前日期(分钟和秒),我想找到最接近当前日期的记录(通过"myDate"字段).
谢谢
您可以使用当前日期减去集合中的日期,取差异的绝对值以考虑将来的日期,然后使用排序和限制来获取最近的文档:
db.a.aggregate([ { $project : { myDate : 1, otherData : 1, difference : { $abs : { $subtract : [new Date(), "$myDate"] } } } }, { $sort : {difference : 1} }, { $limit : 1 } ])
$project
如果需要difference
输出文档中的字段,可以使用其他字符.此外,您可以使用任何其他日期而不是当前日期,并找到该日期的最近日期.