Cosmos DB

时间:2017-09-06 21:06:06

标签: azure azure-cosmosdb

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

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

这可能不是最有效的存储方式,但这就是我的开始。但我希望能够在一段时间内从数据库中查询所有联系人文档。 startDate endDate 表示记录有效的时间。历史记录目前包含可能可以改进的记录的整个历史记录。

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

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)

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

其次,你的病情是历史.StartDate&lt; = 1504656001 AND history.EndDate&gt; = 1504656001。

播放范围,例如history.StartDate&gt; = 1504656001 AND history.EndDate&lt; = 1504656111。

HTH