Cypher:查询选择由两个具有不同属性的相同关系的实例连接的两个节点?

时间:2014-05-19 19:47:08

标签: neo4j relationship cypher

我有一些节点n8通过两个具有相同关系的实例连接到另一个节点n9。这些实例仅因关系属性tag而异。第一个关系实例有tag = foo,第二个实例有tag = bar(参见下面的代码)。

什么查询将从所有其他节点和关系中选择这两个节点?换句话说:如何使用不同的属性查询与相同关系连接两个的两个节点?

create (n8 { id:'n8' })
create (n9 {id:'n9' })

MATCH (x),(y)
WHERE x.id = 'n8' AND y.id = 'n9'
CREATE (x)-[r:rl {tag:'foo'}]->(y)
RETURN r

MATCH (x),(y)
WHERE x.id = 'n8' AND y.id = 'n9'
CREATE (x)-[r:rl {tag:'bar'}]->(y)
RETURN r

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题。使用两个MATCH子句,与WHERE子句配对,允许关系的tag成为可能列表中的任何值:

MATCH (n8)-[firstRel:r1]->(n9),
      n8-[secondRel:r1]->n9
WHERE firstRel.tag in ['foo', 'bar'] AND
      secondRel.tag in ['foo', 'bar'] AND
      firstRel <> secondRel AND
      firstRel.tag <> secondRel.tag
return firstRel, secondRel