【问题标题】:Date Between Query in Cosmos DBCosmos DB 中查询之间的日期
【发布时间】:2019-08-05 15:27:44
【问题描述】:

我正在 Cosmos DB 中构建一个简单的事件存储,其中包含如下结构的文档:

{
    "id": "e4c2bbd0-2885-4fb5-bcca-90436f79f155",
    "entityType": "contact",
    "history": [
        {
           "startDate": 1504656000,
           "endDate": 1504656000,
           "Name": "John"
        },
        {
           "startDate": 1504828800,
           "endDate": 1504828800,
           "Name": "Jon"
        }
    ]
}

这可能不是最有效的存储方式,但这是我开始的方式。但我希望能够在一段时间内从数据库中查询所有 contact 文档。 startDateendDate 表示记录有效的时间。历史记录当前包含可能需要改进的记录的全部历史记录。

我尝试过创建这样的查询:

SELECT c.entityType, c.id,history.Name, history.startDate  FROM c
JOIN history in c.history
where
    c.entityType = "contact" AND
    (history.StartDate <= 1504656001
        AND history.EndDate  >=  1504656001)

此查询应返回 2017 年 9 月 7 日的联系人状态,但它会返回所有历史记录。我玩过几个选项,但我不确定我错过了什么。

我也尝试过设置索引(也许这是问题所在?)所以我在这里包含了索引策略:

{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
    {
        "path": "/*",
        "indexes": [
            {
                "kind": "Range",
                "dataType": "String",
                "precision": -1
            },
            {
                "kind": "Range",
                "dataType": "Number",
                "precision": -1
            }
        ]
    }
],
"excludedPaths": []
}

我错过了什么?索引是否正确?我的查询对于查询之间的日期是否正确?

【问题讨论】:

  • 我最终将其保存为 unix 时间。
  • 历史属性是未绑定列表吗?能长到很大吗?如果是这样,您可能会考虑将历史记录移动到具有不同 entityType 的不同对象。请参阅this answer
  • @MatiasQuaranta 未绑定列表的限制是什么?你是说我应该更好地规范化数据吗?我不确定该历史列表会增长到多大。我会说最多可能有 300-500 个实体。
  • 未绑定列表的问题是您的文档大小会增长,使您的查询运行成本更高,如果两个作者想要将历史记录添加到同一个文档,您可能会遇到一些并发问题(除非您正在显式处理并发)。部分更新是not yet supported,所以问题是每次添加 1 个历史条目时都必须更新整个文档。

标签: azure azure-cosmosdb


【解决方案1】:

你有两个问题。 Matias 在评论中提到了其中之一。

第二,你的条件是history.StartDate &lt;= 1504656001 AND history.EndDate &gt;= 1504656001

使用范围,例如history.StartDate &gt;= 1504656001 AND history.EndDate &lt;= 1504656111.

【讨论】:

  • 嗨,我的字段值是“TimeStamp”:“2020-10-16T21:18:29”,我想要一个查询,它给我最近 5 分钟之间的记录支持现在 21:20 运行查询然后在 21:15:01 到 21:19:59 之间给我结果你能帮忙选择吗?
猜你喜欢
  • 2021-11-05
  • 1970-01-01
  • 2020-07-21
  • 2019-11-14
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多