I am working on an application that extracts objects based on their ID from a NoSQL CosmosDB. The container has the following details:
- ContainerName: ScenariosTable
- Partition key: /_partitionKey
- Type: Non-hierarchical
Here are the relevant methods:
[HttpGet("GetScenario/{scenarioId}")]
public async Task<string> GetScenarioAsync(string scenarioId, [FromQuery] string version = "")
{
Scenario result;
if (string.IsNullOrEmpty(version) || string.Equals(version, "undefined"))
{
result = await repository.GetItemByQueryAsync(s => s.Id == scenarioId).ConfigureAwait(false);
}
else
{
result = await historyRepository.GetItemByQueryAsync(s => s.Id == scenarioId).ConfigureAwait(false);
}
if (result != null)
{
return JsonConvert.SerializeObject(result);
}
else
{
throw new ApplicationException($"Could not retrieve scenario definition");
}
}
public async Task<T> GetItemByQueryAsync(Expression<Func<T, bool>> predicate)
{
var result = await GetDocumentsCollectionAsync(predicate).ConfigureAwait(false);
return result.FirstOrDefault();
}
private async Task<IEnumerable<T>> GetDocumentsCollectionAsync(Expression<Func<T, bool>> predicate)
{
IDocumentQuery<T> query = client.CreateDocumentQuery<T>(
this.documentCollectionUri,
new FeedOptions { MaxItemCount = -1, EnableCrossPartitionQuery = true, PartitionKey = new PartitionKey("_partitionKey") })
.Where(predicate)
.AsDocumentQuery();
List<T> results = new List<T>();
while (query.HasMoreResults)
{
results.AddRange(await query.ExecuteNextAsync<T>().ConfigureAwait(false));
}
return results;
}
this is the error:
Microsoft.Azure.Documents.DocumentClientException: 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.
ActivityId: 9ce56a2c-d5ec-45d8-ad39-a78ef6f5ffa2, Microsoft.Azure.Documents.Common/2.14.0, Windows/10.0.20348 documentdb-netcore-sdk/2.11.6
at Microsoft.Azure.Documents.GatewayStoreClient.ParseResponseAsync(HttpResponseMessage responseMessage, JsonSerializerSettings serializerSettings, DocumentServiceRequest request)
at Microsoft.Azure.Documents.GatewayStoreClient.InvokeAsync(DocumentServiceRequest request, ResourceType resourceType, Uri physicalAddress, CancellationToken cancellationToken)
at Microsoft.Azure.Documents.GatewayStoreModel.ProcessMessageAsync(DocumentServiceRequest request, CancellationToken cancellationToken)
at Microsoft.Azure.Documents.Client.DocumentClient.ProcessRequestAsync(DocumentServiceRequest request, IDocumentClientRetryPolicy retryPolicyInstance, CancellationToken cancellationToken)
at Microsoft.Azure.Documents.Client.DocumentClient.ProcessRequestAsync(String verb, DocumentServiceRequest request, IDocumentClientRetryPolicy retryPolicyInstance, CancellationToken cancellationToken, String testAuthorization)
at Microsoft.Azure.Documents.Query.DocumentQueryExecutionContextBase.ExecuteQueryRequestInternalAsync(DocumentServiceRequest request, IDocumentClientRetryPolicy retryPolicyInstance, CancellationToken cancellationToken)
at Microsoft.Azure.Documents.Query.DocumentQueryExecutionContextBase.ExecuteQueryRequestAsync(DocumentServiceRequest request, IDocumentClientRetryPolicy retryPolicyInstance, CancellationToken cancellationToken)
at Microsoft.Azure.Documents.Query.DefaultDocumentQueryExecutionContext.ExecuteOnceAsync(IDocumentClientRetryPolicy retryPolicyInstance, CancellationToken cancellationToken)
at Microsoft.Azure.Documents.Query.DefaultDocumentQueryExecutionContext.<>c__DisplayClass8_0.<b__0>d.MoveNext()
— End of stack trace from previous location —
at Microsoft.Azure.Documents.BackoffRetryUtility1.ExecuteRetryAsync(Func
1 callbackMethod,
I tried to set in FeedOptions the parameter “EnableCrossPartition” to true but it is still not working