Запрос CosmsDB к полю даты - PullRequest
       30

Запрос CosmsDB к полю даты

0 голосов
/ 03 декабря 2018

Когда я запускаю следующий запрос на портале AZure, он работает нормально, но при программном запуске из приложения .NET выдает ошибку:

Необработанный запрос на портале Azure CosmosDB: SELECT * FROM c where c.OrderDateTime > '2018-11-29T18:33:17.5957307Z' Работает нормально

string queryString = $"SELECT * FROM c  Where c.OrderDateTime >= '{DateTime.UtcNow.AddDays(-1).ToString("s")}'"; Gives the following error:

Сообщение:

{\ "Errors \": [\ "Указан недопустимый запрос с фильтрами к путям, которые не проиндексированы по диапазону.добавление заголовка разрешения сканирования в запросе. \ "]}

Я понимаю, что даты в запросе диапазона требуют другой обработки, чем строки, но было интересно, как это может работать на портале?Я что-то упустил в своем коде?

1 Ответ

0 голосов
/ 03 декабря 2018

{\ "Ошибки \": [\ "Указан недопустимый запрос с фильтрами к путям, которые не проиндексированы по диапазону. Попробуйте добавить в запрос заголовок разрешения сканирования. \"]}

Полученная здесь ошибка указывает на то, что обработчику запросов не удалось найти индекс диапазона для пути C.OrderDateTime.Пожалуйста, проверьте Indexing Policy вашей коллекции и убедитесь, что числа и строки проиндексированы как диапазон, а не как хеш.Для получения дополнительной информации о правилах индексирования см. официальный документ .

. Или вы можете установить EnableScanInQuery как true в FeedOptions, следуя сообщению об ошибке details:Consider adding allow scan header in the request.Пожалуйста, обратитесь к здесь .

var feedOptions = new FeedOptions
{
   EnableScanInQuery = true,
};

Как я знаю, SQL-запрос на портале отличается от запроса SDK или запроса оставшегося API.Он будет иметь некоторые неявные оптимизации, например, отсутствие необходимости предоставлять ключ раздела для выполнения запроса к столбцу ключа раздела. Это не означает, что ключ раздела не требуется указывать в операции запроса на стороне клиента.

...