У меня проблема с тем, что, если я укажу ключ раздела для конкретного запроса, я получу ожидаемую запись.Однако если я не укажу ключ разделения и просто установлю EnableCrossPartitionQuery в значение true, он не будет возвращать / находить какие-либо документы.
На самом деле это работает, как и ожидалось, в одной из моих баз данных Cosmos, но не в другой.Те же записи / документы.
Я использую следующую настройку
Microsoft.Azure.DocumentDB Версия NuGet пакета 2.3.0
Коллекция Cosmos DB с неограниченной емкостью (с PartitionKey = ApplicationId)
Три очень простых документа в БД / коллекции, созданные вручную с помощью обозревателя хранилища Azure
Мой код выглядит ниже, довольно просто.Если вызывающая сторона GetDocuments передает значение для partitionKey, то я указываю его в запросе через FeedOptions.В противном случае я устанавливаю EnableCrossPartitionQuery в FeedOptions.
Документы в БД / Коллекции, которые работают, такие же, как и в БД / Коллекции, которые не работают.
Я создал Коллекции таким же образом, с тем же ключом раздела (ApplicationId)
public async Task<IEnumerable<T>> GetDocuments<T>(Expression<Func<T, bool>> predicate, object partitionKey = null)
{
IDocumentQuery<T> queryDetails = QueryDocument<T>(predicate, partitionKey);
var queryData = await queryDetails.ExecuteNextAsync<T>();
if (queryData.Any())
{
return queryData;
}
return default(IEnumerable<T>);
}
private IDocumentQuery<T> QueryDocument<T>(Expression<Func<T, bool>> predicate, object partitionKey = null)
{
FeedOptions feedOptions;
if (partitionKey == null)
{
feedOptions = new FeedOptions { EnableCrossPartitionQuery = true };
}
else
{
feedOptions = new FeedOptions { PartitionKey = new PartitionKey(partitionKey) };
}
var query = _client.CreateDocumentQuery<T>(DocumentCollectionUri, feedOptions);
var queryDetails = query.Where(predicate).AsDocumentQuery();
return queryDetails;
}
Документ выглядит так:
{
"id": "1",
"HubName": "abxyz-hub",
"ClientId": "abxyz",
"ApplicationId": 1,
"ApplicationName": "My App Name",
"_rid": "hSkpAJde99IBAAAAAAAAAA==",
"_self": "dbs/hSkpAA==/colls/hSkpAJde99I=/docs/hSkpAJde99IBAAAAAAAAAA==/",
"_etag": "\"53007677-0000-0100-0000-5cbb3c660000\"",
"_attachments": "attachments/",
"_ts": 1555774566
}
Есть идеи, почемуэто не работает?