我在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": []
}
我错过了什么?索引是否正确?我的查询是否正确查询之间的日期?
答案 0 :(得分:1)
你有两个问题。 Matias在评论中提到了一个问题。
其次,你的病情是历史.StartDate&lt; = 1504656001 AND history.EndDate&gt; = 1504656001。
播放范围,例如history.StartDate&gt; = 1504656001 AND history.EndDate&lt; = 1504656111。
HTH