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