【问题标题】:Mongodb searching date ranges within a list of datesMongodb在日期列表中搜索日期范围
【发布时间】:2015-10-06 05:57:56
【问题描述】:

在mongodb中,

如果我有一个日期,并且我想查询日期晚于提供的日期的记录,我可以这样做:

collection.find({datefield:{$gt:somedate}})

如果我想查找日期范围之间的记录,我可以使用 lt 和 gt 执行 $and。

但是说我的日期字段实际上是日期字段,一个日期列表。并说datefield有以下记录

datefields = [june 1, 2015 hhmmss, june 2, 2015 hhmmss, june 14, 2015 hhmmss]
datefields = [june 1, 2015 hhmmss, june 3, 2015 hhmmss, june 8, 2016 hhmmss, june 17, 2015 hhmmss]

我将如何构建搜索以获取日期在 6 月 3 日和 6 月 7 日之间的所有记录,以便我只获得第二条记录。如果范围不可能,我可以只搜索 2015 年 6 月 3 日而忽略 hhmmss 吗?

【问题讨论】:

    标签: mongodb pymongo


    【解决方案1】:

    认为这将解决您的问题。使用聚合操作展开数组并将每个元素视为文档中的单独值。

    db.collection.aggregate( [
    { $unwind : { "$datefields" } },
    { $match : { datefields : { $gt : ISODate("2015-06-02T00:00:01Z"), $lte : ISODate("2015-06-03T23:59:59Z")} } }
    ])
    

    仅此一项将为您提供数组结果的“分解视图”,每个匹配的数组元素都有一个文档。如果你想把它折叠起来,你可以添加一个 $group 阶段。

    如果这不是你要问的,你能提供更多细节吗?

    对于您关于“忽略 hhmmss”的问题的后半部分,关于此问题已经回答了许多问题。查看Query Mongodb on month, day, year... of a datetime

    【讨论】:

    • 是的!我不知道聚合或放松,这就是我需要的。那么聚合本质上是一个子集合吗?
    • No.... 聚合是处理的一个特殊分支。它被称为“聚合管道”,它允许您执行各种管道操作,以各种方式过滤文档集合。查看文档和一些教程,它非常强大。 docs.mongodb.org/manual/core/aggregation-introduction
    • 快速提问,最外层的 {} 应该改为 [] 吗?如果我遇到奇怪的错误,例如“无法编码对象:set(["Dates"]),这是数据完整性问题吗?
    • 哦,是的,对不起。今天太多低头 C# 了。还缺少 $unwind 上的支架。我会编辑。
    • 能否请您提及要使用的日期格式,即; somedatesomeotherdate 以上
    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 2018-10-13
    • 2017-10-25
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多