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

DocumentDB: get all documents of same entity type

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

目前我看到的选项:

  1. 将类型包含为 属性。但这意味着在获取文件时要查看每个文件,对吗?
  2. 将类型名称添加到文档 ID 并尝试使用 typename*.
  3. 按 ID 搜索

有更好的方法吗?

如果在集合上索引类型 属性,则不会是完整扫描。

没有 built-in entity-type 属性,但您当然可以创建自己的,并确保它已编入索引。此时,就像添加 WHERE 子句一样简单:

WHERE docs.docType = "SomeType"

假设它是一个 hash-based 索引,这应该提供高效的查找并过滤掉不需要的文档类型。

虽然您 可以 将类型嵌入到 属性 中(例如文档 ID),但您必须进行部分字符串匹配,这不会与 indexed-property 比较一样有效。

如果您想知道此查询的成本是多少,RU 值会显示在门户中并通过 x-ms-request-charge return header.

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

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