谁能给我解释一下幕后花絮吗? `
// Query multiple items from container
using FeedIterator<Product> feed = container.GetItemQueryIterator<Product>(
queryText: "SELECT * FROM products"
);
// Iterate query result pages
while (feed.HasMoreResults)
{
FeedResponse<Product> response = await feed.ReadNextAsync();
// Iterate query results
foreach (Product item in response)
{
Console.WriteLine($"Found item:\t{item.name}");
}
}
`
来自https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/how-to-dotnet-query-items这里我理解的是 GetItemQuery 从页面中的数据库获取数据。 feed.HasMoreResults 检查是否还有剩余页面,然后 ReadNextAsync 加载下一页。响应包含加载的页面中的所有项目,并且在 foreach 循环中我们遍历每个项目。我仍然想要详细描述 GetItemQueryIterator 如何获取数据。它是否获取满足查询的全部数据?调用 GetItemQueryIterator 时,页面是否加载到某个缓冲区或其他内容上,或者 ReadNextAsync 是否直接从数据库获取每个页面?与大型数据库一样,是一次获取所有页面,或者由 GetItemQueryIterator 发送页面列表,然后 ReadNextAsync 从列表中获取每个页面。我不知道这东西是如何工作的。
最佳答案
当您获得FeedIterator<T>
时使用GetItemQueryIterator<T>
除了一些元数据之外,不会从数据库中检索任何数据。
一旦您使用ReadNextAsync
方法将查询首次发送到 Cosmos 数据库,您将收到第一组文档。随后的每个ReadNextAsync
将获取下一组文档,直到最后一个响应表明您已获得所有内容并且 HasMoreResults
设置为false
.
关于c# - FeedIterator 和 ReadNextAsync 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74938875/