【发布时间】:2019-05-21 19:34:19
【问题描述】:
我正在使用 Neo4J 图形数据库。
我有两个节点标签:
- :个人(用户)
- :事件(用户创建的事件:与地点、开始日期、客人...)
还有 2 种关系类型:
- :IS_INVITED_TO
- :IS_INVITED_BY
为简单起见,我已将查询简化到最低限度。
这里是查询:
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 天..):
- UNWIND collect(event) AS 事件(在第一个 MATCH 和 WITH 之后):与当前事件迭代一起工作
- 添加 WHERE 子句以强制查找当前事件
- 我在 Neo4J 的文档/stackoverflow 上到处搜索
帮助将不胜感激! 非常感谢:-)
【问题讨论】:
-
只有像
(user)-[:IS_INVITED_BY]->(r:Person)这样的架构,我不明白如何将IS_INVITED_BY与事件联系起来...... -
@logisima 我也试过这个模式:
(event)<-[:IS_INVITED_TO]-(user)-[:IS_INVITED_BY]->(invitor:Person)-[:CREATOR|IS_INVITED_TO]->(event)为了简单起见,我没有发布它。这样我可以将IS_INVITED_BY与事件联系起来? -
不...您的活动已与许多用户共享,因此您不知道链接
IS_INVITED_BY是给谁的!