Neo4j Cypher:根据另一个查询过滤查询结果
Neo4j Cypher: Filtering a query results based on another query
我正在尝试查找一个查询唯一的名称列表,并排除两个查询结果之间共有的名称。例如,我想要学生 A、B 和 C 参加的 类 的名称。并从该列表中排除学生 D 和 E 参加的 类。在帮助下这个问题的答案 (),我尝试了这个 Cypher 代码并且它有效,但我得到的结果是节点。我希望它作为名称列表,而不是节点。
Match (m:class)-[r]-(n:student) where n.name in ['aa','bb','cc']
WITH COLLECT(m) AS EXCLUDED
MATCH (m1:class)-[r1]-(n1:student) where n1.name in ['dd','ee']
WITH EXCLUDED, COLLECT(m1) AS included
RETURN FILTER(m1 IN included WHERE NOT m1 IN EXCLUDED)
谢谢!
你可以有另一个 WITH
和 UNWIND
。
Match (m:class)-[r]-(n:student) where n.name in ['aa','bb','cc']
WITH COLLECT(m) AS EXCLUDED
MATCH (m1:class)-[r1]-(n1:student) where n1.name in ['dd','ee']
WITH EXCLUDED, COLLECT(m1) AS included
WITH FILTER(m1 IN included WHERE NOT m1 IN EXCLUDED) as _results
UNWIND _results as results
RETURN results.name
注意: FILTER()
在 neo4j 3.5 中被弃用,在 4.0 中被移除以支持 List Comprehension
我正在尝试查找一个查询唯一的名称列表,并排除两个查询结果之间共有的名称。例如,我想要学生 A、B 和 C 参加的 类 的名称。并从该列表中排除学生 D 和 E 参加的 类。在帮助下这个问题的答案 (
Match (m:class)-[r]-(n:student) where n.name in ['aa','bb','cc']
WITH COLLECT(m) AS EXCLUDED
MATCH (m1:class)-[r1]-(n1:student) where n1.name in ['dd','ee']
WITH EXCLUDED, COLLECT(m1) AS included
RETURN FILTER(m1 IN included WHERE NOT m1 IN EXCLUDED)
谢谢!
你可以有另一个 WITH
和 UNWIND
。
Match (m:class)-[r]-(n:student) where n.name in ['aa','bb','cc']
WITH COLLECT(m) AS EXCLUDED
MATCH (m1:class)-[r1]-(n1:student) where n1.name in ['dd','ee']
WITH EXCLUDED, COLLECT(m1) AS included
WITH FILTER(m1 IN included WHERE NOT m1 IN EXCLUDED) as _results
UNWIND _results as results
RETURN results.name
注意: FILTER()
在 neo4j 3.5 中被弃用,在 4.0 中被移除以支持 List Comprehension