IDocumentQuery.ExecuteNextAsync()的问题

时间:2018-05-02 07:10:42

标签: azure-cosmosdb

我有标准的代码行,用分页来获取数据。它曾经工作到一个月前,然后停止。在运行ExecuteNextAsync()时,它会停止执行,并在“输出”窗口中显示以下信息:

DocDBTrace信息:0:处理了ID为2的DocumentClient。

DocDBTrace信息:0:处理了ID为1的DocumentClient。

不工作代码:

var query = 
client.CreateDocumentQuery(
                UriFactory.CreateDocumentCollectionUri(databaseId, "TestCollection"), "select c.id from TestCollection c",
                new FeedOptions
                {
                    //MaxDegreeOfParallelism=-1,
                    MaxItemCount = maxItemCount,
                    PopulateQueryMetrics=true
                    //RequestContinuation = requestContinuation,
                    //EnableScanInQuery = true,
                    //EnableCrossPartitionQuery = true
                });
                var queryAll = query.AsDocumentQuery();

            var results = new List<TDocument>();
     while (queryAll.HasMoreResults)
            {
                try
                {
                    var result = await queryAll.ExecuteNextAsync();
                    var queryMetrics = result.QueryMetrics;

                    if (result.ResponseContinuation != null) requestContinuation = result.ResponseContinuation;
//Do something here
  }
                catch (Exception ex)
                {
                }
            }

对于同一客户端对象,创建/更新或一起提取所有项目都有效。所以JsonSerializer或DocumentClient对象不能成为问题。 工作代码:

var query2 = client.CreateDocumentQuery(
                UriFactory.CreateDocumentCollectionUri(databaseId, collectionName), "select * from TestCollection c",
                new FeedOptions { MaxItemCount = -1 });
                //.Where(l => l.Id == qId);

            var testData2= query2.ToList();

这已经停止了我们的服务及其发展。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您的查询错误。

UriFactory.CreateDocumentCollectionUri(databaseId, "TestCollection")已经让SDK知道要查询的内容。

如果你只是改变

select c.id from TestCollection c

select c.id from c

它会起作用。目前它无法解析c别名,因为那里也有TestCollection。

使用*的其他查询有效的唯一原因是您没有使用c.