Azure 如何在DocumentDb.NET SDK上使用ReadDocumentFeedAsync?
我只是尝试使用简单的.NET控制台程序浏览Azure DocumentDb集合中的所有文档:Azure 如何在DocumentDb.NET SDK上使用ReadDocumentFeedAsync?,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我只是尝试使用简单的.NET控制台程序浏览Azure DocumentDb集合中的所有文档: 使用(var client=newdocumentclient(serviceEndPoint,authKey)) { var feed=client.ReadDocumentFeedAsync(docsLink,newfeedoptions{MaxItemCount=-1}); WriteLine(“feed.Count={0}”,feed.Count); WriteLine(“feed.Curren
使用(var client=newdocumentclient(serviceEndPoint,authKey))
{
var feed=client.ReadDocumentFeedAsync(docsLink,newfeedoptions{MaxItemCount=-1});
WriteLine(“feed.Count={0}”,feed.Count);
WriteLine(“feed.CurrentResourceQuotaUsage={0}”,feed.CurrentResourceQuotaUsage);
var计数=0;
foreach(提要中的变量项)
{
计数++;
}
WriteLine(“读取计数={0}”,计数);
}
我的代码基于
尽管使用MaxItemCount=-1(用于动态页面大小调整),但我始终获得以下结果:
feed.Count = 9700
feed.CurrentResourceQuotaUsage = documentSize=612;documentsSize=515130;documentsCount=425200;collectionSize=627243;
Read count = 9700
因此,我的集合包含超过40万个文档,但提要只返回前9700个文档
azure门户度量(据我所知)确认有425k个文档:
我曾尝试手动设置MaxItemCount
,但结果仅限于前9700项
那么,我的代码出了什么问题?代码中缺少的是对延续令牌的处理。实际上,每个请求都被分配了一个特定的执行时间,并且它试图在分配的时间内返回最大的数据量。如果有更多数据,它将返回一个延续令牌,您将使用该令牌并再次执行查询。由于您希望获取所有记录,因此将执行循环,直到服务返回延续令牌为止 请参阅下面的示例代码(我还没有尝试运行它)
谢谢,我错过了FeedOptions参数上的ContinuationToken。而这似乎是误导。
using (var client = new DocumentClient(serviceEndPoint, authKey))
{
string continuationToken = null;
var count = 0;
do
{
var feed = client.ReadDocumentFeedAsync(docsLink, new FeedOptions { MaxItemCount = -1, RequestContinuation = continuationToken }).Result;
continuationToken = feed.ResponseContinuation;
Console.WriteLine("feed.Count = {0}", feed.Count);
Console.WriteLine("feed.CurrentResourceQuotaUsage = {0}", feed.CurrentResourceQuotaUsage);
foreach (var item in feed)
{
count++;
}
}
while (continuationToken != null);
Console.WriteLine("Read count = {0}", count);
}