2017-06-13 30 views
0

我在CosmosDB上有几个JSON文档,其中一个子节点是以下列格式表示日期和时间的字符串“yyyy-mm-dd HH: MM:SS”。我想知道是否可以使用查询资源管理器来获取日期时间在特定范围内的所有文档。我试图通过字符串比较来做到这一点,但我不知道该怎么做。我尝试了CompareTo函数,但我会得到不正确的语法错误。Azure的CosmosDB:查询资源管理器基于比较时间戳获取文档作为字符串

这是我的每个文件的样子:

{ "Blocks": [...] 
    } 

由于查询探险合并所有文件一起,这是它给了我从执行这个查询“从c。选择*”,外部列表含多个词典:

[ 
    {"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的值的所有项目,其中DateTimeStringUpper为<。理想情况下,返回的文件应该是这个样子:

{"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中的请求单元成本更低

回答

1

如果我理解你[R要求正确地,下面的查询应该做的工作:

SELECT VALUE Block 
    FROM c 
    JOIN Block IN c.Blocks 
WHERE Block.StartDateTime >= '2017-06-12' 
    AND Block.StartDateTime < '2017-06-13' 

它会产生一个结果,它看起来像

[ 
    { "StartDateTime": "2017-06-12 16:00:00", ... }, 
    { "StartDateTime": "2017-06-12 13:00:00", ... }, 
    ... 
] 

对于比较正常工作,您需要在您的收藏能范围指标,至少为比较财产。请参阅索引配置示例here

+0

我得到以下错误使用该查询:“一个无效的查询已指定与筛选器不是范围索引的路径(s),请考虑添加允许扫描标头请求中。 –

+0

另外我编辑了什么问题,并写了我想要的结果。 –

+0

我用'='而不是比较器测试了你的查询,并且它可以工作。看起来你不能使用'>'或'<'来比较字符串。 –

相关问题