我们假设我有以下文件:
[
{
"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来构建长查询。
如何简洁地表达此查询?
答案 0 :(得分:0)
您可以使用JOIN
重写查询,如下所示:
SELECT c
FROM c
JOIN tag IN c.field
WHERE ARRAY_CONTAINS(["Foo1", "Foo3"], tag)
请注意,如果您有一个包含两个标记的对象,那么它会在结果中多次出现,您必须在客户端执行不同/重复数据删除。