Azure DocumentDB:获取相同实体类型的所有文档

Azure DocumentDB:获取相同实体类型的所有文档,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我将几种不同类型(实体类型?)的文档存储在一个集合中。获取特定类型的所有文档的最佳方法是什么(就像您使用select*从表中获取文档一样) 我目前看到的选择: 将类型包含为属性。但这意味着在获取文档时要仔细查看每个文档,对吗 在文档id前面加上类型名,然后尝试使用typename*按id搜索 有更好的方法吗?如果对集合上的type属性进行索引,则不会进行完整扫描。没有内置的实体类型属性,但您当然可以创建自己的属性,并确保已对其进行索引。此时,添加WHERE子句非常简单: WHERE docs.d

我将几种不同类型(实体类型?)的文档存储在一个集合中。获取特定类型的所有文档的最佳方法是什么(就像您使用
select*
从表中获取文档一样)

我目前看到的选择:

  • 将类型包含为属性。但这意味着在获取文档时要仔细查看每个文档,对吗
  • 在文档id前面加上类型名,然后尝试使用
    typename*
    按id搜索

  • 有更好的方法吗?

    如果对集合上的type属性进行索引,则不会进行完整扫描。

    没有内置的实体类型属性,但您当然可以创建自己的属性,并确保已对其进行索引。此时,添加WHERE子句非常简单:

    WHERE docs.docType = "SomeType"
    
    假设它是一个基于散列的索引,这将提供有效的查找并过滤掉不需要的文档类型

    虽然可以将类型嵌入到属性(如文档id)中,但随后必须进行部分字符串匹配,这不如索引属性比较有效


    如果您想知道此查询的成本,RU值将显示在门户网站中,并通过
    x-ms-request-charge
    返回标题显示。

    我同意David的回答,使用单个
    docType
    字段是我第一次开始使用DocumentDB时所做的。然而,在做了一些实验之后,我开始使用另一个选项。即创建一个
    is
    字段并将其值设置为true。对于查询来说,这比使用单个字符串字段稍微有效一些,因为索引本身是较小的部分索引,但可能会占用稍多的存储空间


    这种方法的另一个优点是它为继承和混合提供了优势。例如,我在某些实体上同时具有
    isLookup=true
    isState=true
    。我还有其他查找类型。然后在我的应用程序代码中,一些行为对于所有查找字段都是通用的,而其他行为仅适用于状态类型。

    我看到您在多个答案中推荐了这种技术。如何实现这一点?你是在每个实体类上添加这些属性还是开发了更通用的技术?我使用node.js,所以不确定使用.NETI的最佳方法。感谢您澄清这些问题-我发现您对DocumentDB的回答非常有用。