我正在尝试从TYPE1和TYPE2中获取节点,但在文档中它只列出了如何为TYPE1或TYPE2执行此操作
(a)-[r:TYPE1|TYPE2]->(b)
是否有运营商作为"和" ?
答案 0 :(得分:4)
所以你要找的是关系类型的ALL
谓词。
基本上,这也意味着节点b
与x
之间的关系至少为a
,其中x
是您作为参数传递的不同关系类型的数量。
此处使用WITH
:
WITH ['typeA','typeB'] as validTypes
MATCH (a)-[r]->(b)
WITH b, collect(distinct(r)) as types, validTypes
WHERE ALL(x in validTypes WHERE x IN types)
RETURN b
如果你通过将validTypes作为查询参数传递来执行相同的操作,它将如下所示:
MATCH (a)-[r]->(b)
WITH b, collect(distinct(r)) as types
WHERE ALL(x in {validTypes} WHERE x IN types)
RETURN b
以下是一个示例控制台:http://console.neo4j.org/r/3zdml9
答案 1 :(得分:0)
关系只能有一种类型。所以在你给出的例子中:
(a)-[r:TYPE1|TYPE2]->(b)
变量r
绑定为TYPE1
或TYPE2
的关系。匹配TYPE1
和TYPE2
的关系是没有意义的,因为这种关系不存在。
如果您尝试匹配具有多个标签的节点,您可以这样做:
MATCH (a:Person)
MATCH (a:Agent)
RETURN a
a
只会是同时包含Person
和Agent
标签的节点。
答案 2 :(得分:0)
Cypher没有and
来检查节点a,b有TYPE1
和TYPE 2
。
但是你可以尝试在这样的地方写TYPE2
:
match (a)-[r:TYPE1]-(b)
where ((a)-[:TYPE2]-(b))
return a,b
您也可以像这样使用with
:
match (a)-[r:TYPE1]-(b)
with a,b
match (a)-[r2:TYPE2]-(b)
return a,b
希望这些代码能为您提供帮助。