CosmosDB Paging Return Value

Multi tool use
Multi tool use


CosmosDB Paging Return Value



I am trying to return paging results the request from CosmosDB. I saw this example from here but I am not sure what to do with the response variable.


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>();
}



Am I suppose to return it directly? Or do I have to do something further with the response variable? I tried to return the response variable directly and it's not working. Here's my code:


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;
}



Update:
After reading @Evandro Paula's answer, I followed the URL and changed my implementation to below. But it is still giving me 500 status code:


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;
}



And here's the exception message:



Cross partition query is required but disabled. Please set
x-ms-documentdb-query-enablecrosspartition to true, specify
x-ms-documentdb-partitionkey, or revise your query to avoid this
exception., Windows/10.0.17134 documentdb-netcore-sdk/1.9.1



Update 2:
I added the EnableCrossPartitionQuery to true and I am able to get the response from CosmosDB. But I am not able to get the 1 item that I defined. Instead, I got 11 items.


EnableCrossPartitionQuery




1 Answer
1



Find below a simple example on how to use the CosmosDB/SQL paged query:


private static async Task Query()
{
Uri uri = new Uri("https://{CosmosDB/SQL Account Name}.documents.azure.com:443/");
DocumentClient documentClient = new DocumentClient(uri, "{CosmosDB/SQL Account Key}");

int currentPageNumber = 1;
int documentNumber = 1;

IDocumentQuery<Book> query = documentClient.CreateDocumentQuery<Book>("dbs/{CosmoDB/SQL Database Name}/colls/{CosmoDB/SQL Collection Name}", new FeedOptions { MaxItemCount = 10 }).AsDocumentQuery();

while (query.HasMoreResults)
{
Console.WriteLine($"----- PAGE {currentPageNumber} -----");

foreach (Book book in await query.ExecuteNextAsync())
{
Console.WriteLine($"[{documentNumber}] {book.Id}");
documentNumber++;
}

currentPageNumber++;
}
}



Per exception described in your question Cross partition query is required but disabled, update the feed options as follows:


var feedOptions = new FeedOptions { MaxItemCount = 1, EnableCrossPartitionQuery = true};



Find a more comprehensive example at https://github.com/Azure/azure-documentdb-dotnet/blob/d17c0ca5be739a359d105cf4112443f65ca2cb72/samples/code-samples/Queries/Program.cs#L554-L576.





Thanks for your reply. I followed the URL you provided but it's still not working for some reason. I have added to the last part of my question above. Thanks!
– Wendy W.
Jul 3 at 0:21





Please update the question with the exception you're seeing.
– Evandro Paula
Jul 3 at 0:32





Change the feed options to var feedOptions = new FeedOptions { MaxItemCount = 1, EnableCrossPartitionQuery = true};
– Evandro Paula
Jul 3 at 0:41





Yes, you are correct. I am able to get response from CosmosDB but I am getting all the items, not 1 item that I specified.
– Wendy W.
Jul 3 at 0:42





It's because you're adding all results to the list before returning (e.g. while (query.HasMoreResults){}).
– Evandro Paula
Jul 3 at 0:45







By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

D3oh,1ALZPuT3t4zUOf5vivfglnQH6N,jLLPvmaYM K0W6O,agamDpVGWcz6cPm8aABIi oFZIFSBqQKld
jy52c qlAKESYt

Popular posts from this blog

PHP contact form sending but not receiving emails

Do graphics cards have individual ID by which single devices can be distinguished?

Create weekly swift ios local notifications