我有两个不同标签的结构:
树节点的标签:人
graph nodes'label:Friend
1)树:
a-->b-->d
| |
| -->e
|
-->c-->f
|
-->g
|
-->h
2)图:
b-->a-->f-->g-->b
|
-->b
我有这个密码查询,我期望返回的是:“b”
但它返回null。我该怎么写这个查询????
MATCH (a),(b)
WHERE a.name='ali'
AND (a:Friend)-[:FRIEND_OF]-(b:Friend)
AND (a:Person)-[:PARENT_OF]->(b:Person)
RETURN b.name
答案 0 :(得分:0)
如果你能解释一下你想要做什么,那将会有很大帮助。我真的不懂。
由于人们之间的关系已经有标签(FRIEND_OF
,PARENT_OF
),为什么要使用Friend
节点标签?除非你有充分的理由,否则我只会拥有Person
标记的节点。
您发布的查询将返回与Ali成为朋友的人员节点,其中Ali是他/她的父母。它可以改写为:
MATCH (a:Person {name:"ali"})-[:FRIEND_OF]-(b:Person)
WHERE (a)-[:PARENT_OF]->(b)
RETURN b.name
我没有您的数据集,因此很难测试结果。你说你没有得到任何结果。
你能验证一下:
只有一个名称为ali的节点,它有你正在寻找的2个关系?如果有2个名称为ali的节点,并且每个节点都具有上述关系之一,则Neo4j不会找到任何匹配项。您正在寻找具有两种关系的正好一个节点。
节点b存在且具有名称属性?