【问题标题】:How to write a query to find a documents which is created after " Aug 1 ,2020,3:58:56 PM"如何编写查询以查找在“2020 年 8 月 1 日下午 3:58:56”之后创建的文档
【发布时间】:2020-09-22 06:09:49
【问题描述】:

如何编写查询以查找在“2020 年 8 月 1 日下午 3:58:56”之后创建的文档。 我需要从 Cloudant 中查找大于特定日期的文档。在 Cloudant,日期存储为“2020 年 5 月 18 日下午 3:58:56”。

当我尝试如下查询时:

{
    "selector": {
        "$and": [
            {
                "project.projectId": {
                    "$eq": 34567
                }
            },
            {
                "createdDate": {
                    "$gte": "Aug  1 ,2020,3:58:56 PM"
                }
            }
        ]
    }
}

我也得到了 2019 年的数据。正确的搜索不起作用。

过滤日期的正确方法是什么?

【问题讨论】:

    标签: couchdb cloudant


    【解决方案1】:

    文档中的日期是不可比较的字符串。您要求 Cloudant Query 进行字典字符串比较。为此,您的日期字符串需要采用可比较的格式,例如“YYYY-MM-DD HH:MM:SS”。但是,更好的解决方案是使用数字日期时间。

    如果您不想修改文档以使用不同的格式,请创建一个 map-reduce 视图,该视图首先解析日期字符串,然后发出向量值键:

    d = Date.parse(doc.createdDate);
    emit([doc.projectId, d.getFullYear(), d.getMonth()+1, d.getDate()], [...]);
    

    您可以从这个视图中进行优雅的范围查询。

    这里有一些有用的示例和其他与日期相关的技巧:https://blog.cloudant.com/2018/08/24/Time-sortable-document-ids.html

    【讨论】:

      猜你喜欢
      • 2021-02-02
      • 1970-01-01
      • 2021-01-15
      • 2022-01-08
      • 1970-01-01
      • 2013-06-20
      • 2020-05-21
      • 1970-01-01
      • 2022-07-20
      相关资源
      最近更新 更多