neo4j使用关系查找相关属性

时间:2016-09-21 12:34:12

标签: neo4j cypher

我的关系如下:
    (U:用户) - [r:标记{tagID,timestamp}] - >(P:播放器{名称='汤姆'})

User1 tagged player Tom,the tagID is 1 and the tagName is good
User2 tagged player Tom,the tagID is 2 and the tagName is bad

和节点如:
    (t:tag {tagID,tagName})

tagID  tagName
1      Good
2      Bad

节点'标记'并且标记的关系使用相同的tagID,如何根据给定的玩家名称(例如Tom)找到所有tagName,例如Good,Bad等?我尝试下面的事情:

match (:User)-[r:tagged]->(P:Player{Name:'Tom'}),(t:tag)
where t.tagID=r.tagID
return t.tagName
order by tagName desc
limit 20

我得到语法错误 我期待的是

tagName
Good
Bad

2 个答案:

答案 0 :(得分:0)

如果没有更多信息,很难回答你的问题。 1.在你的关系描述中没有property3。 2.您还没有包含有关您的对象或其关系的真实信息。

我的猜测是你想要这样的东西: match(b {property0:'VALUE0'}) match(b)<-[r:{property1:'VALUE1', property2:'VALUE2'}]-(a) return a

这基本上是说,创建一个变量b并为其分配db中具有value0等于VALUE的property0的对象。然后创建另一个变量a并为其分配与b具有关系的值,其中关系的property1等于VALUE1,property2等于VALUE2。 如果您不想要的话,请详细说明您要完成的工作以及您收到的错误。

答案 1 :(得分:0)

编辑完成后,您的查询看起来几乎正确,只需稍作调整即可。

您可能应该添加语法错误,但我猜它是因为您尝试仅按&#34; tagName&#34;进行订购,这不是变量或列中的范围(&#34; t.tagName&#34;在范围内,您可能想要别名)

您还希望确保在匹配的代码上使用tagID后面的某处使用distinct,因为多个人可能会使用相同的代码标记播放器

试试这个:

match (:User)-[r:tagged]->(:Player{Name:'Tom'})
with distinct r.tagID as tagID
match (t:tag)
where t.tagID = tagID
return t.tagName AS tagName
order by tagName desc
limit 20