Cosmo Sql Db - 使用延续令牌查询数据永远不会完成

时间:2018-05-31 05:08:05

标签: c# .net azure azure-cosmosdb

我的数据库包含来自租户ID标识的多个数据源的数据。虽然One Tenant拥有数百万条记录,但另一条记录只有75条记录,如下面的屏幕截图enter image description here

当我使用以下代码查询数据时

  var count = continuationToken?.Count ?? ContinuationToken.DefaultPageCount;
        var feedOptions = new FeedOptions
        {
            EnableCrossPartitionQuery = true,
            MaxItemCount = count,
            RequestContinuation = continuationToken?.NextRowKey
        };

        var query = sortByAscending
            ? _client.CreateDocumentQuery<T>(_collection.DocumentsLink, feedOptions).Where(filter).OrderBy(order).AsDocumentQuery()
            : _client.CreateDocumentQuery<T>(_collection.DocumentsLink, feedOptions).Where(filter).OrderByDescending(order).AsDocumentQuery();

        var feedResponse = await query.ExecuteNextAsync<T>();
        var items = feedResponse.AsEnumerable().ToList();
        var nextPageToken = feedResponse.ResponseContinuation;

        return new ContinuationTokenData<T>(items, items.Count, nextPageToken, count);

过滤器位于租户ID上。前2页(每页25条记录)的租户数据很好地回来了。但是,当它到达最后25条记录时,延续令牌会不断重复旧值,如下所示 enter image description here

你知道如何修复这个或者这是一个CosmoDb错误吗?感谢

1 个答案:

答案 0 :(得分:2)

当token为null时,实际上意味着没有延续(如请求2和4中)。

如果您发送FeedOptions RequestContinuation = null,它将始终返回第一页。