【发布时间】:2018-07-02 23:07:44
【问题描述】:
我正在尝试返回来自 CosmosDB 的请求的分页结果。我从here 看到了这个例子,但我不确定如何处理response 变量。
// Fetch query results 10 at a time.
var queryable = client.CreateDocumentQuery<Book>(collectionLink, new FeedOptions { MaxItemCount = 10 });
while (queryable.HasResults)
{
FeedResponse<Book> response = await queryable.ExecuteNext<Book>();
}
我想直接退货吗?还是我必须对 response 变量做进一步的事情?我试图直接返回响应变量,但它不起作用。这是我的代码:
public async Task<IEnumerable<T>> RunQueryAsync(string queryString)
{
var feedOptions = new FeedOptions { MaxItemCount = 3 };
IQueryable<T> filter = _client.CreateDocumentQuery<T>(_collectionUri, queryString, feedOptions);
IDocumentQuery<T> query = filter.AsDocumentQuery();
var response = new FeedResponse<T>();
while (query.HasMoreResults)
{
response = await query.ExecuteNextAsync<T>();
}
return response;
}
更新: 阅读@Evandro Paula 的回答后,我遵循URL 并将我的实现更改为以下。但它仍然给我 500 状态码:
public async Task<IEnumerable<T>> RunQueryAsync(string queryString)
{
var feedOptions = new FeedOptions { MaxItemCount = 1 };
IQueryable<T> filter = _client.CreateDocumentQuery<T>(_collectionUri, queryString, feedOptions);
IDocumentQuery<T> query = filter.AsDocumentQuery();
List<T> results = new List<T>();
while (query.HasMoreResults)
{
foreach (T t in await query.ExecuteNextAsync())
{
results.Add(t);
}
}
return results;
}
这是异常消息:
跨分区查询是必需的,但已禁用。请设置 x-ms-documentdb-query-enablecrosspartition 为 true,指定 x-ms-documentdb-partitionkey,或修改您的查询以避免这种情况 例外。,Windows/10.0.17134 documentdb-netcore-sdk/1.9.1
更新 2:
我将EnableCrossPartitionQuery 添加为true,并且能够从CosmosDB 获得响应。但我无法获得我定义的 1 项。相反,我得到了 11 件物品。
【问题讨论】:
标签: rest azure asp.net-core azure-cosmosdb paging