CosmosDB C # sql не возвращает результаты - PullRequest
0 голосов
/ 10 января 2019

Я уверен, что пропустил что-то очевидное. Список товаров всегда пуст

.Net Core 2.1 веб-приложение

Microsoft.Azure.DocumentDB.Core 2.2.1

                var opts = new FeedOptions()
            {
                PartitionKey = new PartitionKey("/clientId"),  
                EnableCrossPartitionQuery = true,
                EnableScanInQuery = true,                       
            };
            string sql = "SELECT * FROM c "; 
            var items = client.CreateDocumentQuery(collectionLink: collectionLink.ToString(), sqlExpression: sql, feedOptions: opts).ToList();

            if (!items.Any())
            {

Используя предложение where на портале, оно работало, как и ожидалось. На портале я убедился, что в коллекции есть документы (в настоящее время 5). Код без исключения, поэтому мои имена баз данных / коллекций верны, как и collectionLink.

Итак, я попробовал другую коллекцию с тысячами документов в одной и той же БД - то же самое, никаких результатов не получилось.

                var sql = "SELECT top 10 * FROM c";
            IQueryable<dynamic> query = client.CreateDocumentQuery<string>(collectionLink, new SqlQuerySpec(sql), opts);

            foreach (string alias in query)
            {
                Console.WriteLine(alias);
            }

Чего мне не хватает?

1 Ответ

0 голосов
/ 10 января 2019

По моему опыту, вы можете установить здесь неверное значение ключа раздела.

PartitionKey = new PartitionKey("/clientId")

Ключ раздела должен быть установлен в качестве значения поля, а не имени поля.

Например, мои документы, как показано ниже:

{
    "id": "1",
    "name": "jay"
}

{
    "id": "2",
    "name": "jay2"
}

Мой partitionkey - это 'name' , поэтому здесь у меня есть два раздела: 'jay' и 'jay1' .

Вам следует установить для свойства partitionkey значение 'jay' или 'jay2', а не 'name'.

...