按Cosmos Db中的类型过滤文档

时间:2017-11-23 02:56:08

标签: azure azure-cosmosdb

我尝试按特定类型提取文档。这是我基于文档的第一次尝试:

var dataStoreStatuses = 
  _documentClient.CreateDocumentQuery<DataStoreStatus>(
                    DocumentService.CollectionUri, new FeedOptions() { 
                      EnableCrossPartitionQuery = true })
                 .ToList();

问题是此请求甚至返回不符合DataStoreStatus架构的文档。我想这是因为Cosmos Db是无模式的(尽管文档说DataStoreStatus定义了the type of object to query),但它应该如何工作。

我以前使用RavenDb并存储了文档类型,因此这种查询非常容易执行。有没有办法在Cosmos Db中实现这一目标?

1 个答案:

答案 0 :(得分:2)

正如您已经提到的,DocumentDB是无模式的。当文档说“DataStoreStatus定义要查询的对象的类型”时,我相信你所看到的是客户端API的文档。特定泛型类型参数实际上不是发送到DocumentDB存储的查询的一部分,而是在获取文档后用作第二步,以帮助自动将返回的文档映射到所需的类型。后一步纯粹是客户端。

因此,据我所知,根据设计,您无法按查询类型查询文档。

解决方法

如果您需要按类型查询文档,则需要将此类信息存储到文档本身。拥有一个名为“type”的属性是很常见的。然后你可以进行查询:

select * from c where c.type = 'DataStoreStatus'

请注意,您的实体类型也应包含该字段。