如何编写文档数据库查询,返回满足输入列表条件的子文档结果?

时间:2017-03-13 18:33:21

标签: azure-cosmosdb

我们假设我有以下文件:

[
  {
    "name" : "obj1",
    "field": [ "Foo1", "Foo3" ]
  },
  {
    "name": "obj2",
    "field": [ "Foo2" ]
  },
  {
    "name": "obj3",
    "field": [ "Foo3" ]
  },
  {
    "name": "obj4",
    "field": [ "Foo1" ]
  }
]

我想编写一个查询,当搜索field =“Foo1”或“Foo3”时返回obj1,obj3和obj4。显然我可以写一些像:

SELECT * FROM c WHERE ARRAY_CONTAINS(c.field, "Foo1") OR ARRAY_CONTAINS(c.field, "Foo3")

虽然我想避免通过为搜索列表中的每个值连接查询字符串和ARRAY_CONTAINS来构建长查询。

如何简洁地表达此查询?

1 个答案:

答案 0 :(得分:0)

您可以使用JOIN重写查询,如下所示:

SELECT c
FROM c
JOIN tag IN c.field
WHERE ARRAY_CONTAINS(["Foo1", "Foo3"], tag)

请注意,如果您有一个包含两个标记的对象,那么它会在结果中多次出现,您必须在客户端执行不同/重复数据删除。