gpt4 book ai didi

azure - DocumentDb "where"带有数学表达式的子句

转载 作者:行者123 更新时间:2023-12-03 00:43:43 27 4
gpt4 key购买 nike

我想了解如何在 DocumentDB 上创建带有数学比较器的查询where子句

例如,我使用了 this demonstrator了解如何进行“大于”比较:表达式 AND food.version > 0 似乎效果很好。

这是我在portal.azure.com documentdb查询浏览器上尝试的内容和结果。我不明白为什么在某些情况下会出现错误(QUERY3),以及(在选项中)如何在 Portal.azure.com 上获取错误详细信息?!

测试:

>>> QUERY1 >>
SELECT d.id,
d.name,
d.lastUpdateTime
FROM d
>>> RESULT1 >>
[
{
"id": "558d6007b909e8dfb2286e7b",
"name": "cSimpleSIMS_ici",
"lastUpdateTime": 1435589982672
},
{
"id": "558d6009b909e8df18296e7b",
"name": "didier",
"lastUpdateTime": 1435330811285
},
{
"id": "558d600ab909e8df28296e7b",
"name": "cDoubleSIMD_ici",
"lastUpdateTime": 1435331176750
},
{
"id": "558d600bb909e8df55296e7b",
"name": "george",
"lastUpdateTime": 1435330813519
}
(...)
]

>>> QUERY2 >>
SELECT d.id,
d.name,
d.lastUpdateTime
FROM d
WHERE (d.name='george')

>>> RESULT2 >>
[
{
"id": "558d600bb909e8df55296e7b",
"name": "george",
"lastUpdateTime": 1435330813519
}
]

>>> QUERY3 >>
SELECT d.id,
d.name,
d.lastUpdateTime
FROM d
WHERE (d.lastUpdateTime > 14)
>>> RESULT3 IN ERROR!

>>> QUERY4 >>
SELECT d.id,
d.name,
d.lastUpdateTime
FROM d
WHERE (d.name='george' AND d.lastUpdateTime > 14)

>>> RESULT4 >>
[
{
"id": "558d600bb909e8df55296e7b",
"name": "george",
"lastUpdateTime": 1435330813519
}
]


>>> QUERY5 >>
SELECT d.id,
d.name,
d.lastUpdateTime
FROM d
WHERE (d.name='george' AND d.lastUpdateTime > 1435330813519)

>>> RESULT5 >>
[]

最佳答案

这是要点...

如今,DocumentDB 中的所有 JSON 属性都会自动通过哈希索引进行索引;这意味着使用相等运算符(例如 WHERE d.name= "george")的查询速度非常快。

另一方面,范围查询(例如 WHERE d.lastUpdateTime > 14)需要范围索引才能有效运行。如果没有范围索引,范围查询将需要扫描所有文档(如果请求传入 header x-ms-documentdb-query-enable-scan,我们允许扫描)。

您发出的同时具有相等和范围过滤器的查询(例如 WHERE d.name='george' AND d.lastUpdateTime > 14)成功了,因为相等过滤器极大地缩小了集合范围要扫描的文档。

TL;DR:您可以在此处执行两件事来消除错误:

  1. 创建自定义索引策略以添加数字类型的范围索引。索引策略的文档可以找到 here .

  2. 以编程方式(而不是通过 Azure 门户)发出查询,以设置 x-ms-documentdb-query-enable-scan header 以允许扫描范围查询。

附注我将努力为您改进 Azure 门户。

现在...Azure 门户中似乎存在一些问题 - 我将插入为您解决这些问题。

错误:异常消息被截断

看起来异常消息中有意义的部分在使用 Azure 门户时被截断了 - 这可不是什么好事。应该显示的是:

Microsoft.Azure.Documents.DocumentClientException: Message: {"Errors":["An invalid query has been specified with filters against path(s) that are not range-indexed. Consider adding allow scan header in the request."]}

缺少功能:在查询资源管理器中启用扫描

目前,Azure 门户的查询资源管理器中未公开设置 x-ms-documentdb-query-enable-scan header 的功能。我们将为此添加一个复选框或其他内容。

关于azure - DocumentDb "where"带有数学表达式的子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31209970/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com