【问题标题】:Azure document DB orderby timestamp fieldAzure 文档数据库 orderby 时间戳字段
【发布时间】:2016-05-27 06:37:31
【问题描述】:

我的每个文档中都有一个timestamp 字段。时间戳采用ISODate 格式。有什么方法可以在 Document Explorer 或 Query Explorer 中使用它对数据进行排序?

【问题讨论】:

    标签: azure azure-cosmosdb


    【解决方案1】:

    每个文档都有一个名为“_ts”的默认时间戳字段。 例如,您可以使用以下查询获取最后一个文档:

    SELECT * FROM c ORDER BY c._ts DESC

    【讨论】:

    • 它可以使用我自己的时间戳,而不是文档的内置 _ts 字段吗?
    • 你确定吗?因为我将以ISODate 格式将时间戳存储为string。这是因为我发这个问题的时候他们的sdk没有让我直接使用jsDate对象
    【解决方案2】:

    如果您的 ISO 日期字符串字段具有全精度 (-1) 索引,则 ORDER BY 会按预期工作。

    【讨论】:

    • 呃抱歉我没听懂你说的。你能详细说明一下吗?
    • 您必须指定一个索引策略来使用值中的所有数据。没有它,DocumentDB 将只使用前 3 个字节。你想指定一个范围索引。
    【解决方案3】:

    将日期存储为纪元,而不是 ISO 日期。如果您需要文档中的可读日期,您可以同时存储两者。

    看到这个https://azure.microsoft.com/en-us/blog/working-with-dates-in-azure-documentdb-4/

    - 根据评论和拉里的回答,您可以使用精度为 -1 的范围索引(范围索引的要求)。您可以将门户中的索引要求设置为 json 或代码。

    new IncludedPath { 
        Path = "/your_iso_property_path" ,
        Indexes = new Collection<Index> {
            new RangeIndex(DataType.String) { Precision = -1 } 
        }
    });
    

    更多详情请见https://azure.microsoft.com/nb-no/documentation/articles/documentdb-indexing-policies/

    如果您使用 API 或之前使用门户创建了集合,则字符串的默认索引将是哈希索引。

    【讨论】:

    • 这是一个选项,它更节省空间,但我发现使用 ISO 日期字符串可以提高性能。它是人类可读的,我不必像你建议的那样添加士气低落(“同时存储”)。
    猜你喜欢
    • 2021-06-05
    • 2019-12-10
    • 1970-01-01
    • 2019-10-20
    • 2019-04-30
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多