我在Document db中创建了一个Partitioned Collection,我希望能够在不进行跨分区查询的情况下从该集合中查询特定分区中的所有文档。举例来说,假设我正在将Car对象写入此Collection,而Partition Key字段是Car.Manufacturer。制造商是一个字符串。
我想从我的分区集合中查询属于特定制造商的所有Car文档。
最有效的方法是什么?目前我在下面做,我知道这会导致交叉分区查询 - 即使我在查询中显式设置分区键(到“梅赛德斯”)
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);
}
}
我正在寻找一个解决方案来进行此查询而不会导致交叉分区查询?
您可以通过向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);
}
}