Запрос в DocumentDB для поиска
У меня есть документы что-то вроде
{ id : "123", name : "sai", marks : {English : 50, Maths : 60, Science :90} }
Марки могут содержать любые предметы и любые имена. (схема не является фиксированной)
Я хочу список студентов, которые потерпели неудачу по любому предмету (<35 по любому предмету)
Есть ли способ сделать это или нужно изменить схему, чтобы получить результаты?
Любая помощь будет принята с благодарностью.
1 ответ
Так что с небольшой модификацией вашей схемы мой документ теперь выглядит так:
{id : "123", name : "sai", marks : [
{Subject : "English", Grade : 50},
{Subject : "Maths", Grade : 60},
{Subject : "Science", Grade : 90}
]
}
Затем необходимо добавить пользовательский IndexingPolicy IncludePath, который позволяет выполнять запросы Range следующим образом:
{
Path : /"marks"/[]/"Grade"/?,
IndexType : Range,
NumericPrecision : 3
}
Как только это будет сделано, вы можете выполнить следующий запрос
SELECT VALUE students FROM students JOIN marks IN students.marks WHERE marks.Grade < 60
Если вы хотите сделать это в.NET с LINQ, дайте мне знать, и я опубликую LINQ для этого запроса.
Если вы не добавите индекс RANGE в поле "Оценка", вы все равно сможете выполнить этот запрос, но вам нужно будет указать параметр "Разрешить сканирование в запросе", который приведет к принудительному сканированию. Не очень хорош для производительности, этот способ намного лучше.
Если вы не можете изменить свою схему на ту, которая у меня есть, то дайте мне знать, и я немного поиграю с запросом