Cosmos DB .NET 3.0 SDK

时间:2019-03-13 23:02:24

标签: .net azure azure-cosmosdb

我看到,使用新的.NET SDK,我们可以从查询返回流,因此我尝试这样做,以避免序列化/反序列化并节省一些时间。

但是问题是,如果我的查询应该返回超过8k条记录,我将丢失记录,因为所有元素的最大时间一直在7800左右。有没有办法增加它,因为我找不到一个一个迭代中查询可以返回的最大元素数量? 我不想遍历响应,也不想使用延续令牌,我只想将响应作为流丢弃。

1 个答案:

答案 0 :(得分:1)

我假设GetItemStreamIterator是查询流所必须使用的方法,它将获得一个迭代器作为原始CosmosResponseMessage遍历容器的所有项目

这是您可以查询的参数集。

参数

maxItemCount-可为空 (可选)作为查询的一部分返回的最大商品数

continuationToken-字符串 (可选)Azure Cosmos DB服务中的延续令牌。

requestOptions- CosmosItemRequestOptions (可选)项目查询请求CosmosQueryRequestOptions的选项

public class ToDoActivity{
    public string id {get; set;}
    public string status {get; set;}
}

CosmosResultSetIterator setIterator = this.Container.Items.GetItemStreamIterator();
while (setIterator.HasMoreResults)
{
    using (CosmosResponseMessage iterator = await setIterator.FetchNextSetAsync())
    {
        using (StreamReader sr = new StreamReader(iterator.Content))
        {
            string content = await sr.ReadToEndAsync();
        }
    }
}

您是否尝试过在查询中传递maxcount(大于8k)。看看是否有帮助。

注意:最好在查询中使用continuationtoken以拥有更多控制权。