DocumentDb聚合操作的RequestCharge

时间:2017-06-15 15:40:11

标签: azure-cosmosdb

在对documentDb执行linq计数查询时是否可以获取RequestCharge? 例如样本linq查询

   count = client.CreateDocumentQuery<Family>(collectionUri, DefaultOptions)
       .Where(f => f.LastName == "Andersen")
       .Count();

由于

敦尔

1 个答案:

答案 0 :(得分:1)

  

在对documentDb执行linq计数查询时是否可以获取RequestCharge?

如果要对documentDb使用linq count查询,则需要在Count方法之前调用ToList方法。

.ToList().Count();

它将向documentDb服务器发送多个查询并获取所有文档。以下是我在调用ToList()时在Fiddler中找到的请求列表.Count()。我的集合中只有2个文档,因此发送2 / dbs / ToDoList / colls / Items请求。

enter image description here

它等于以下代码,并且可以使用以下代码将RequestCharges添加到一起。

IDocumentQuery<T> query = client.CreateDocumentQuery<Family>(collectionUri, DefaultOptions)
    .Where(f => f.LastName == "Andersen")
    .AsDocumentQuery();

List<T> results = new List<T>();
double sumRequestCharges = 0;
while (query.HasMoreResults)
{
    FeedResponse<T> queryResult = await query.ExecuteNextAsync<T>();
    sumRequestCharges += queryResult.RequestCharge;
    results.AddRange(queryResult);
}

如果您只需要查询文档的计数,我们建议您使用sql查询而不是.ToList方法。它不会向documentDb服务器发送多个请求并节省大量时间。以下代码供您参考。

var query = client.CreateDocumentQuery<object>(
    UriFactory.CreateDocumentCollectionUri(DatabaseId, CollectionId),new SqlQuerySpec("SELECT count(c.id) FROM c")).AsDocumentQuery();
FeedResponse <object> queryResult = await query.ExecuteNextAsync<object>();
double requestCharge = queryResult.RequestCharge;