我有这样的集合:
{
"_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”字段)。
由于
答案 0 :(得分:8)
您可以使用当前日期减去集合中的日期,获取差异的绝对值以考虑将来的日期,然后使用排序和限制来获取最近的文档:
db.a.aggregate([
{
$project : {
myDate : 1,
otherData : 1,
difference : {
$abs : {
$subtract : [new Date(), "$myDate"]
}
}
}
},
{
$sort : {difference : 1}
},
{
$limit : 1
}
])
如果您想要输出文档中的$project
字段,则可以使用其他difference
。您也可以使用任何其他日期代替当前日期,并找到该日期的最近日期。