MongoDB查询。如何找到最接近当前日期的日期?

标签 mongodb

我有这样的收藏:

{
    "_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
}
])

如果您想要输出文档中的 difference 字段,您可以使用额外的 $project。此外,您可以使用任何其他日期来代替当前日期并找到最接近该日期的日期。

关于MongoDB查询。如何找到最接近当前日期的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41773782/

相关文章:

javascript - 数据未通过 MongoDB 集合

mongodb - 为什么reactivemongo的collection.save()会执行get()?

node.js - 如何从 mongoDB 获取多个文档?

mongodb - 练习Elastic bundle:日期解析异常

mongodb - 按数组长度排序

mongodb - 在 MongoDB 中执行 compact 时究竟阻塞了什么?

MongoDB:如果使用 $addToSet 或 $push,是否应该预分配文档?

mongodb - Mongo 服务器和 openssl 二进制文件显示不同的 openssl 版本

asp.net-mvc - MVC 和 NOSQL : Saving View Models directly to MongoDB?

mongodb - Kubernetes mongodb 就绪探测失败