DocumentDB SQL检查数组中的多个值

时间:2017-09-12 09:58:54

标签: sql azure azure-cosmosdb

我使用Azure的DocumentDB作为我的数据库。我可能有数千个文档,并希望返回包含某些标记的所有文档。

例如:

文件1

{
  "id": "328732,
  "name": "jeff",
  "tags": [
    "A",
    "B",
    "C"
  ]
}

文件2

{
  "id": "54092,
  "name": "ayla",
  "tags": [
    "B",
    "D",
    "F"
  ]
}

文件3

{
  "id": "98234,
  "name": "lara",
  "tags": [
    "B",
    "G",
    "H"
  ]
}

如果我有一个标签列表["A", "F", "X"],则应返回前两个文件(jeff和ayla)。 我可以通过使用内置函数ARRAY_CONTAINS和几个OR运算符来实现这一点:

SELECT * 
FROM c 
WHERE ARRAY_CONTAINS(c.groups, "A") OR
WHERE ARRAY_CONTAINS(c.groups, "F") OR
WHERE ARRAY_CONTAINS(c.groups, "X") 

我想知道是否有更好的方法来实现这一目标。如果我有数百个标签,我需要数百个条件。

1 个答案:

答案 0 :(得分:3)

我知道没有别的方法可以实现你想要的。您可以编写代码,这些代码会自动扩展为ARRAY_CONTAINS一系列OR