我正在使用Neo4J图形数据库。
我有两个节点标签:
和2种关系类型:
为简单起见,我已将查询简化到最低限度。
这是查询:
MATCH (user:Person {guid: $userGuid})-[:IS_INVITED_TO]->(event:Event)
WITH user, event
MATCH (event)<-[:IS_INVITED_TO]-(user)-[:IS_INVITED_BY]->(invitor:Person)
WITH user, event, collect(invitor) AS invitors
RETURN {properties: properties(event), invite_by_nodes: invitors};
我想找到邀请当前用户的所有事件(第1行:工作正常)。
对于每个活动,我想知道谁邀请了我(第3行:不起作用,它返回邀请我参加其他活动的邀请者,而不是当前活动)。
我很确定第3行的模式不正确: 它找到(用户),但忽略(事件)。因此,查询返回邀请我参加某个事件(而不是当前事件)的所有邀请者。
在发布之前,我还尝试了很多事情(丢失了3天。):
我们将不胜感激! 非常感谢:-)
答案 0 :(得分:2)
在您的项目中,邀请似乎很重要,因此邀请必须是节点。
您的模型应该是:
(:User)-[:HAS_INVITATION]->(i:Invitation)-[:FOR_EVENT]->(:Event),
(i:Invitation)-[:COMES_FROM]->(:User)
因此您的查询将变为:
MATCH
(user:User {guid: $userGuid})[:HAS_INVITATION]->(i:Invitation),
(i)-[:COMES_FROM]->(invitor:User),
(i)-[:FOR_EVENT]->(e:Event)
RETURN e, invitor