Запрос в 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 в поле "Оценка", вы все равно сможете выполнить этот запрос, но вам нужно будет указать параметр "Разрешить сканирование в запросе", который приведет к принудительному сканированию. Не очень хорош для производительности, этот способ намного лучше.

Если вы не можете изменить свою схему на ту, которая у меня есть, то дайте мне знать, и я немного поиграю с запросом

Другие вопросы по тегам