假设我需要验证CosmosDB集合中的每个文档是否已设置AnImportantProperty
(=属性存在,可能具有显式值null)。它们大多数都可以,但是出于“原因”,其中一些可能不是。
我可以将新属性包括在索引策略中,因此我可以轻松地通过索引覆盖的查询找到哪些文档可以使用:
select * from c where is_defined(c.AnImportantProperty)
但是相反的查询(这是我真正感兴趣的)似乎没有从索引中受益:
select * from c where NOT is_defined(c.AnImportantProperty)
是否可以编写索引/查询来查找缺少属性的文档而无需进行全面扫描?
编辑: 例如,我听说过一些关于negated indexes和mysterious "v2 index"的二手谣言。两者都可能表明存在(或将是)这种情况的解决方案。
答案 0 :(得分:0)
很难。我没有想到任何事情,因为您有效地列出了除已知价值以外的所有内容。但是,我建议采取另一种方法。
type
属性type=“someType”
,将具有属性的属性存储为type=“someOtherType"
subtype
我可能会尝试类似的方法。任何避免扫描过多的东西。
答案 1 :(得分:0)
当前(2019年7月)似乎没有否写这种查询的方法。
尽管所有希望都没有丧失,根据Azure Cosmos DB Team comment for the feature request,它处于计划阶段:
计划在2019年12月结束的当前开发周期中从索引中返回这样的查询。