我看到,使用新的.NET SDK,我们可以从查询返回流,因此我尝试这样做,以避免序列化/反序列化并节省一些时间。
但是问题是,如果我的查询应该返回超过8k条记录,我将丢失记录,因为所有元素的最大时间一直在7800左右。有没有办法增加它,因为我找不到一个一个迭代中查询可以返回的最大元素数量? 我不想遍历响应,也不想使用延续令牌,我只想将响应作为流丢弃。
答案 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以拥有更多控制权。