首页 > 解决方案 > 即使 maxItemCount 设置为 -1,Cosmos Db 也不会返回所有记录

问题描述

我有一个包含 50 000 条记录的 cosmos 数据库,但下面的代码只返回 8356。我认为将 MaxItemCount 设置为 -1 会返回所有记录。我怎样才能做到这一点?

public async Task<IEnumerable<T>> ReadAsync(Expression<Func<T, bool>> predicate)
        {
            var entityList = new List<T>();

            var query = _container.GetItemLinqQueryable<T>(requestOptions: new QueryRequestOptions { MaxItemCount = -1 })
               .Where(predicate).OrderByDescending(x => x.TimeStamp).AsQueryable();

            using (var iterator = query.ToFeedIterator())
            {
                entityList.AddRange(
                    await iterator.ReadNextAsync());
            }

            return entityList;
        }

标签: azure-cosmosdb

解决方案


您没有耗尽所有查询结果(缺少对 HasMoreResults 的检查):

public async Task<IEnumerable<T>> ReadAsync(Expression<Func<T, bool>> predicate)
{
    var entityList = new List<T>();

    var query = _container.GetItemLinqQueryable<T>(requestOptions: new QueryRequestOptions { MaxItemCount = -1 })
       .Where(predicate).OrderByDescending(x => x.TimeStamp).AsQueryable();

    using (var iterator = query.ToFeedIterator())
    {
        while (iterator.HasMoreResults)
        {
            entityList.AddRange(
                await iterator.ReadNextAsync());
        }
    }

    return entityList;
}

参考(Intellisense 文档):https ://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.feediterator-1?view=azure-dotnet#examples


推荐阅读