我试图查询一个集合,其中包含的文档很少。有些集合有"Exception“属性,而有些则没有。
我的最终查询看起来像这样:
Records that do not contain Exception:
**select COUNT(1) from doc c WHERE NOT IS_DEFINED(c.Exception)**
Records that contain Exception:
**select COUNT(1) from doc c WHERE IS_DEFINED(c.Exception)**但这似乎并不管用。当不是IS_DEFINED返回一些计数时,IS_DEFINED返回0个记录,其中它实际有数据。
我的数据看起来像这样(一些文档可以包含异常属性,而其他文档则不包含):
[{
'Name': 'Sagar',
'Age': 26,
'Exception: 'Object reference not set to an instance of the object', ...
},
{
'Name': 'Sagar',
'Age': 26, ...
}]发布于 2017-12-12 06:21:12
IS_DEFINED和非IS_DEFINED之间的主要区别是前者使用索引,而后者不使用索引( w/ = vs. !=)。这里最有可能的情况是IS_DEFINED查询在单个延续中完成,因此您将获得完整的计数结果。另一方面,NOT IS_DEFINED查询似乎没有在单个延续中完成,因此您得到了部分计数结果。您应该通过遵循查询继续来获得完整的结果。
发布于 2020-08-12 15:45:11
更新
正如Dax Fohl在answer中所说,NOT IS_DEFINED现在已经实现了。有关更多详细信息,请参阅cosmos dev blob April updates。
要正确使用它,查询的属性应该添加到集合的索引中。
博文摘录:
现在可以更高效地运行带有不等式过滤器或未定义值过滤器的
查询。以前,这些筛选器不使用索引。当执行查询时,Azure Cosmos DB将首先评估查询中其他较便宜的过滤器(如=、>或<)。如果存在不等式筛选器或未定义值上的筛选器,则查询引擎将需要加载每个文档。由于不等式过滤器和未定义值上的过滤器现在利用了索引,因此我们可以避免加载这些文档,并看到RU费用的显着改善。
以下是经过改进的查询筛选器的完整列表:
如果您有使用这些筛选器的查询,则应为相关属性添加索引。
https://stackoverflow.com/questions/47717753
复制相似问题