2017-06-15 59 views
1

对documentDb执行linq计数查询时可能获取RequestCharge吗? 如样品LINQ查询DocumentDb聚合操作上的RequestCharge

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

感谢

多纳尔

回答

1

是否有可能得到RequestCharge执行对documentDb一个LINQ计数查询时?

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

.ToList().Count(); 

它会发送多个查询到documentDb服务器并获取所有文档。这里是我在调用ToList()。Count()时在Fiddler中找到的请求列表。我的收藏中只有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; 
+0

谢谢Amor我会玩sql选择查询,看看会产生什么。请注意,我正在处理的文档数据库查询示例不使用ToList方法! –

+0

直接调用Count方法会引发异常。如果它支持你,你可以在使用Fiddler调用Count方法时检查发送了多少请求。 – Amor

+0

嗨,Amor,请参阅此链接的DocumentClient使3个调用 - https://stackoverflow.com/questions/44590614/documentdb-query-that-expects-full-results-from-aggregate-functions-is-not-sup –