【发布时间】:2017-06-13 20:16:39
【问题描述】:
我在 CosmosDB 上有一些 JSON 文档,其中一个子节点是表示日期和时间的字符串,格式如下“yyyy-mm-dd HH:MM:SS”。我想知道查询资源管理器是否可以获取日期时间在特定范围内的所有文档。我试图通过字符串比较来做到这一点,但我不知道该怎么做。我尝试了 CompareTo 函数,但我会得到一个不正确的语法错误。
这是我每个文档的样子:
{ "Blocks": [...]
}
由于查询资源管理器将所有文档合并在一起,这就是执行此查询“Select * from c”给我的结果,这是一个包含多个字典的外部列表:
[
{"Blocks": [...]},
{"Blocks": [...]},
{"Blocks": [...]},
...
]
Blocks 的值是一个如下所示的列表:
[
{"StartDateTime" : "2017-06-12 16:00:00", ...},
{"StartDateTime" : "2017-06-11 11:00:00", ...},
{"StartDateTime" : "2017-06-12 13:00:00", ...},
...
]
内部列表中的每个元素都是一个字典,其中一个键是“StartDateTime”,值是上面指定格式的字符串。
我的目标是能够查询该内部列表中 StartDateTime >= DateTimeStringLower 和 StartDateTime
{"Blocks":
[
{"StartDateTime" : "2017-06-12 16:00:00", ...},
{"StartDateTime" : "2017-06-11 11:00:00", ...},
{"StartDateTime" : "2017-06-12 13:00:00", ...},
...
]
}
但如果不完全一样,我可以解决它。
我已经尝试过这个查询Select * from d in c.Blocks Where d.StartDateTime.CompareTo("2017-06-12") >= 0,但它给了我一个关于 '(' 的语法错误。这个命令甚至会遍历所有块吗?
解决这个问题的正确方法是什么? 谢谢。
PS:只是一个附带问题。一旦我找出正确的查询,我可以在 python 中使用它吗?我有这行代码docs = client.ReadDocuments(coll_link)。有没有办法用python中的查询而不是所有文档来获取部分文档?它会在 Azure 中花费更少的请求单位。
【问题讨论】:
标签: python azure-cosmosdb