Есть ли способ фильтрации по значению в массиве строк с использованием SQL API в Cosmos DB? - PullRequest
1 голос
/ 04 ноября 2019

Я новичок в SQL API. Я пытаюсь написать запросы для документов, как это:

{
   "School" : "ABC Elementary"
   "Grades" : [
      {
          "gradeLevel" : "First",
          "subjects" : ["Drawing", "Music", "Numbers", "Words" ]
      },
      {
          "gradeLevel" : "Second",
          "subjects" : ["Art", "Music", "Numbers", "Phonetics" ]
      }
   ]
}

другой документ может быть

{
   "School" : "DEF Elementary"
   "Grades" : [
      {
          "gradeLevel" : "First",
          "subjects" : ["Drawing", "Music", "Numbers", "Words" ]
      },
      {
          "gradeLevel" : "Second",
          "subjects" : ["Arts & Crafts", "Music", "Numbers", "Phonetics", "PE" ]
      }
   ]
}

Я пытаюсь написать запрос, который будет возвращать документы, которые имеют "PE"как предмет (только один в вышеприведенном примере, школьный документ" DEF Elementary ") или" Музыка "(оба школьных документа в примере).

Я пытался

SELECT * FROM c 
JOIN o IN o.Grades 
WHERE "PE" IN o.subjects

, но это не дает никаких результатов. Я не уверен, что этот запрос возможен, если каждый субъект не является также объектом:

"subjects" : [
   {"name" : "Art"}, 
   {"name" : "Music"}
]

Если SQL API не способен возвращать результаты, можно ли это сделать с помощью хранимой процедуры и / или UDF,в то же время учитывая границы раздела?

1 Ответ

2 голосов
/ 04 ноября 2019

Пожалуйста, используйте ниже sql:

SELECT c.School,c.Grades FROM c 
JOIN o IN c.Grades 
WHERE ARRAY_CONTAINS(o.subjects,"PE",true)

Выход:

[
    {
        "School": "DEF Elementary",
        "Grades": [
            {
                "gradeLevel": "First",
                "subjects": [
                    "Drawing",
                    "Music",
                    "Numbers",
                    "Words"
                ]
            },
            {
                "gradeLevel": "Second",
                "subjects": [
                    "Arts & Crafts",
                    "Music",
                    "Numbers",
                    "Phonetics",
                    "PE"
                ]
            }
        ]
    }
]
...