首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure CosmosDB IS_DEFINED vs NOT IS_DEFINED

Azure CosmosDB IS_DEFINED vs NOT IS_DEFINED
EN

Stack Overflow用户
提问于 2017-12-08 23:49:58
回答 2查看 7.9K关注 0票数 6

我试图查询一个集合,其中包含的文档很少。有些集合有"Exception“属性,而有些则没有。

我的最终查询看起来像这样:

代码语言:javascript
复制
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个记录,其中它实际有数据。

我的数据看起来像这样(一些文档可以包含异常属性,而其他文档则不包含):

代码语言:javascript
复制
[{
  'Name': 'Sagar',
  'Age': 26,
  'Exception: 'Object reference not set to an instance of the object', ...
},
{
  'Name': 'Sagar',
  'Age': 26, ...
}]
EN

回答 2

Stack Overflow用户

发布于 2017-12-12 06:21:12

IS_DEFINED和非IS_DEFINED之间的主要区别是前者使用索引,而后者不使用索引( w/ = vs. !=)。这里最有可能的情况是IS_DEFINED查询在单个延续中完成,因此您将获得完整的计数结果。另一方面,NOT IS_DEFINED查询似乎没有在单个延续中完成,因此您得到了部分计数结果。您应该通过遵循查询继续来获得完整的结果。

票数 3
EN

Stack Overflow用户

发布于 2020-08-12 15:45:11

更新

正如Dax Fohl在answer中所说,NOT IS_DEFINED现在已经实现了。有关更多详细信息,请参阅cosmos dev blob April updates

要正确使用它,查询的属性应该添加到集合的索引中。

博文摘录:

现在可以更高效地运行带有不等式过滤器或未定义值过滤器的

查询。以前,这些筛选器不使用索引。当执行查询时,Azure Cosmos DB将首先评估查询中其他较便宜的过滤器(如=、>或<)。如果存在不等式筛选器或未定义值上的筛选器,则查询引擎将需要加载每个文档。由于不等式过滤器和未定义值上的过滤器现在利用了索引,因此我们可以避免加载这些文档,并看到RU费用的显着改善。

以下是经过改进的查询筛选器的完整列表:

  • 不等式比较表达式(例如c.age != 4)
  • NOT IN表达式(例如c.name NOT IN (‘Luis’,‘安德鲁’,IsString(c.name))
  • Coalesce表达式(例如NOT IsDefined(c.age),NOT c.name运算符表达式(例如(c.name ??‘N/A’)= null运算符表达式(例如c.name =‘Thomas’)
  • Ternary?‘N/A’:c.name)

如果您有使用这些筛选器的查询,则应为相关属性添加索引。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47717753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档