有没有一种方法可以在 Cosmos DB 中使用 SQL API 按字符串数组中的值进行过滤?

Is there a way to filter by a value in an array of strings using SQL API in Cosmos DB?

我是 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" ]
      }
   ]
}

我正在尝试编写一个查询,该查询将 return 以 "PE" 作为主题的文档(上例中只有一个,"DEF Elementary" 学校文档)或 "Music"(示例中的两个学校文档)。

我试过了

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

但这不是 return 任何结果。我不确定这个查询是否可行,除非每个主题也是一个对象:

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

如果 SQL API 无法 returning 结果,是否可以使用存储过程和/或 UDF 来完成,同时还要考虑分区边界?

请使用以下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"
                ]
            }
        ]
    }
]