Cypher查询以查找具有3个关系的节点

Dav*_*ner 3 neo4j cypher

我在寻找2个关系时想出了如何编写此查询,但不确定如何为查询添加更多关系.

假设您有一个带有"阅读器"和"书籍"作为节点的图书俱乐部数据库.'book'节点具有'genre'属性(用于定义该书是小说,非小说,传记,参考等).在'读者'节点和'书'节点之间存在关系"HasRead"有人读了一本特定的书.

如果我想找到读过小说非小说类书籍的读者,我可以执行这个Cypher查询:

Start b1=node:MyBookIndex('Genre:Fiction'), 
      b2=node:MyBookIndex('Genre:Non-Fiction')
Match b1-[:HadRead]-r-[:HasRead]-b2
Return r.ReaderName
Run Code Online (Sandbox Code Playgroud)

上述查询的关键是Match子句,它具有两个书籍别名,r用于"读者"节点的别名.

问题:如何编写查询以查找已阅读过小说非小说参考书籍的用户?当你有超过2个你正在寻找的东西时,我会坚持你会如何编写匹配条款.

ean*_*533 8

您可以在单个MATCH子句中指定多行,以逗号分隔.例如,以下两个MATCH子句在语义上是等效的(并且将由引擎进行相同的评估):

//these mean the same thing!
match a--b--c
match a--b, b--c
Run Code Online (Sandbox Code Playgroud)

您可以拥有任意数量的这些比赛.因此,将其插入到您的查询中,您会得到:

start b1=node:MyBookIndex('Genre:Fiction'), 
      b2=node:MyBookIndex('Genre:Non-Fiction'),
      b3=node:MyBookIndex('Genre:Reference')
match b1-[:HasRead]-r,
      b2-[:HasRead]-r,
      b3-[:HasRead]-r
return r.ReaderName
Run Code Online (Sandbox Code Playgroud)