我们假设我们有来自文档的示例查询:
MATCH (n:Actor)
RETURN n.name AS name
UNION
MATCH (n:Movie)
RETURN n.title AS name
我知道如果我这样做:
MATCH (n:Actor)
RETURN n.name AS name
LIMIT 5
UNION
MATCH (n:Movie)
RETURN n.title AS name
LIMIT 5
我可以将每个子查询的返回结果减少到5.如何限制联合查询的总结果?
答案 0 :(得分:2)
这还不可能,但已经有open neo4j issue请求能够进行后UNION处理,其中包括您所询问的内容。如果您支持解决该问题,可以对该neo4j问题添加评论。
答案 1 :(得分:0)
这可以使用UNION后处理来完成,方法是使用COLLECT函数和UNWIND子句重写查询。
首先,我们将结果的列转换为映射(结构,哈希,字典),以保留其结构。对于每个部分查询,我们使用COLLECT将这些映射聚合到一个列表中,这也将我们的行计数(基数)减少为以下MATCH的一(1)。列表的组合是一个简单的列表,用“ +”运算符进行连接。
一旦有了完整的列表,我们将使用UNWIND将其转换回地图行。之后,我们使用WITH子句再次将地图解构为列,并执行诸如排序,分页,过滤或任何其他聚合或操作之类的操作。
重写后的查询如下:
MATCH (n:Actor)
with collect ({name: n.title}) as row
MATCH (n:Movie)
with row + collect({name: n.title}) as rows
unwind rows as row
with row.name as name
return name LIMIT 5
答案 2 :(得分:0)
这在 4.0.0 中是可能的
CALL {
MATCH (p:Person) RETURN p
UNION
MATCH (p:Person) RETURN p
}
RETURN p.name, p.age ORDER BY p.name
在此处详细了解联合后处理https://neo4j.com/docs/cypher-manual/4.0/clauses/call-subquery/