从Azure Document DB中的Partitioned Collection中的特定分区查询所有文档的最有效方法是什么?

时间:2018-08-31 15:27:26

标签: azure-cosmosdb

我在Document db中创建了一个分区集合,我希望能够从该集合中查询特定分区中的所有文档,而无需进行跨分区查询。例如,假设我正在将Car对象写入此Collection,并且Partition Key字段是Car.Manufacturer。制造商是一个字符串。

我要从我的分区集合中查询属于特定制造商的所有Car文档。

最有效的方法是什么?目前,我正在执行以下操作,并且我知道这会导致交叉分区查询-即使我在查询中明确设置了分区键(设置为“ Mercedes”)

IDocumentQuery<Car> query = documentClient.CreateDocumentQuery<Car>(
                UriFactory.CreateDocumentCollectionUri("dbName", "CollectionName"))
                .Where(c => c.Manufacturer == "Mercedes")
                .AsDocumentQuery();

List<Car> mercedesCars = new List<Car>();

            while (query.HasMoreResults)
            {
                foreach (Car car in await query.ExecuteNextAsync<Car>())
                {
                    data.Add(car);
                }
            }

我正在寻找一种解决方案,使该查询不会引起跨分区查询?

1 个答案:

答案 0 :(得分:1)

您可以通过向FeedOptions提供查询并设置PartitionKey属性来指定分区。

您的查询将如下所示:

var feedOptions = new FeedOptions { PartitionKey = new PartitionKey("Mercedes") };
IDocumentQuery<Car> query = documentClient.CreateDocumentQuery<Car>(
            UriFactory.CreateDocumentCollectionUri("dbName", "CollectionName"), feedOptions)
            .Where(c => c.Manufacturer == "Mercedes")
            .AsDocumentQuery();

List<Car> mercedesCars = new List<Car>();

while (query.HasMoreResults)
{
    foreach (Car car in await query.ExecuteNextAsync<Car>())
    {
        data.Add(car);
    }
}