如何编写文档数据库查询,其中 returns 个子文档的结果满足输入列表的任何条件?
How can I write a document db query which returns results of sub-documents satisifying any conditions of input list?
假设我有以下文档:
[
{
"name" : "obj1",
"field": [ "Foo1", "Foo3" ]
},
{
"name": "obj2",
"field": [ "Foo2" ]
},
{
"name": "obj3",
"field": [ "Foo3" ]
},
{
"name": "obj4",
"field": [ "Foo1" ]
}
]
我想编写一个查询,其中 returns obj1、obj3 和 obj4 当搜索字段 = "Foo1" 或 "Foo3" 时。显然我可以这样写:
SELECT * FROM c WHERE ARRAY_CONTAINS(c.field, "Foo1") OR ARRAY_CONTAINS(c.field, "Foo3")
虽然我想通过为搜索列表中的每个值将查询字符串与 ARRAY_CONTAINS 连接来避免构建长查询。
如何简洁地表达这个查询?
您可以使用 JOIN
重写查询,如下所示:
SELECT c
FROM c
JOIN tag IN c.field
WHERE ARRAY_CONTAINS(["Foo1", "Foo3"], tag)
请注意,如果您有一个包含两个标签的对象,那么它会在结果中出现多次,您必须在客户端执行distinct/de-duping。
假设我有以下文档:
[
{
"name" : "obj1",
"field": [ "Foo1", "Foo3" ]
},
{
"name": "obj2",
"field": [ "Foo2" ]
},
{
"name": "obj3",
"field": [ "Foo3" ]
},
{
"name": "obj4",
"field": [ "Foo1" ]
}
]
我想编写一个查询,其中 returns obj1、obj3 和 obj4 当搜索字段 = "Foo1" 或 "Foo3" 时。显然我可以这样写:
SELECT * FROM c WHERE ARRAY_CONTAINS(c.field, "Foo1") OR ARRAY_CONTAINS(c.field, "Foo3")
虽然我想通过为搜索列表中的每个值将查询字符串与 ARRAY_CONTAINS 连接来避免构建长查询。
如何简洁地表达这个查询?
您可以使用 JOIN
重写查询,如下所示:
SELECT c
FROM c
JOIN tag IN c.field
WHERE ARRAY_CONTAINS(["Foo1", "Foo3"], tag)
请注意,如果您有一个包含两个标签的对象,那么它会在结果中出现多次,您必须在客户端执行distinct/de-duping。