如何索引cosmosDB中的缺失值?

时间:2019-07-12 21:05:06

标签: performance indexing azure-cosmosdb azure-cosmosdb-sqlapi

假设我需要验证CosmosDB集合中的每个文档是否已设置AnImportantProperty(=属性存在,可能具有显式值null)。它们大多数都可以,但是出于“原因”,其中一些可能不是。

我可以将新属性包括在索引策略中,因此我可以轻松地通过索引覆盖的查询找到哪些文档可以使用:

select * from c where is_defined(c.AnImportantProperty)

但是相反的查询(这是我真正感兴趣的)似乎没有从索引中受益:

select * from c where NOT is_defined(c.AnImportantProperty)

是否可以编写索引/查询来查找缺少属性的文档而无需进行全面扫描?

编辑: 例如,我听说过一些关于negated indexesmysterious "v2 index"的二手谣言。两者都可能表明存在(或将是)这种情况的解决方案。

2 个答案:

答案 0 :(得分:0)

很难。我没有想到任何事情,因为您有效地列出了除已知价值以外的所有内容。但是,我建议采取另一种方法。

  1. 在所有文档中引入type属性
  2. 在某些属性上有所不同的类/对象(虽然我是说它,我不会说应该)被认为是不同类型的(即使一个继承了其他类型)
  3. 将没有属性的属性存储为type=“someType”,将具有属性的属性存储为type=“someOtherType"
  4. 查询所需的相应类型
  5. 如果还不够,请介绍subtype

我可能会尝试类似的方法。任何避免扫描过多的东西。

答案 1 :(得分:0)

当前(2019年7月)似乎没有写这种查询的方法。

尽管所有希望都没有丧失,根据Azure Cosmos DB Team comment for the feature request,它处于计划阶段:

  

计划在2019年12月结束的当前开发周期中从索引中返回这样的查询。