SQL-запрос CosmosDB с / без «ORDER BY» возвращает различное количество элементов - PullRequest
0 голосов
/ 16 мая 2018

Я запрашиваю базу данных cosmosdb sql из моего веб-сервиса.Просто позвонив:

//Microsoft.Azure.Documents.Client, Version=1.18.0.0
DocumentClient.CreateDocumentQuery<dynamic>(collection, query,
                    new FeedOptions {EnableCrossPartitionQuery = true}).AsEnumerable();

Теперь мой запрос выглядит следующим образом:

SELECT c.Name, c.Grade
FROM c
WHERE c.Grade > 10
AND c.Category = "A"
ORDER BY c.Name

Я получаю 1000 записей назад.Теперь, если я удалю часть "ORDER BY", я получу обратно 6000 строк !!Я что-то пропустил?или это основная ошибка в API?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Я думаю, что ваша проблема связана со значением поля Name в ваших документах.Я проверил несколько типов Name в примерах документов.

После выполнения sql: select c.id,c.itemName from c результаты выглядят следующим образом:

[
    {
        "id": "1",
        "itemName": "A"
    },
    {
        "id": "2",
        "itemName": "B"
    },
    {
        "id": "3",
        "itemName": "C"
    },
    {
        "id": "4",
        "itemName": [
            {
                "test": "for test"
            }
        ]
    },
    {
        "id": "5",
        "itemName": {
            "test": "for test"
        }
    },
    {
        "id": "6",
        "itemName": ""
    },
    {
        "id": "7"
    }
]

Как и в предыдущих документах, вы можете увидеть:

itemName 1 2 3 являются нормальными.

itemName 4 - это объект.

itemName 5 - это массив.

itemName 6 - это "".

itemName 7 не определено.

Затем выполняется sql: select c.id,c.itemName from c order by c.itemName, результаты приведены ниже:

enter image description here

itemName4 5 7 не появился.Поэтому я думаю, что obj, array и undefined value нельзя упорядочить с помощью обычного строкового значения.Это причина вашей проблемы.

Надеюсь, это поможет вам.

0 голосов
/ 16 мая 2018

Это должно быть

SELECT c.Name, c.Grade FROM c WHERE c.Grade > 10 AND c.Category = "A" order by c.Name

Запустить примеры запросов на площадке cosmosdb и поставить галочку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...