neo4j - Neo4J - CQL - 如何完全匹配这种模式?
问题描述
我正在使用 Neo4J 图形数据库。
我有两个节点标签:
- :人(用户)
- :Event(用户创建的事件:地点、开始日期、客人等)
和 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)-[: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
推荐阅读
- css - ng5-slider - 我们如何更改活动滑块的背景颜色?
- amazon-quicksight - 通过来自其他数据集的多个值过滤 Quicksight 数据集
- java - E/StorageException:发生了 StorageException。对象在该位置不存在。在 Firebase 安卓工作室
- python - 在没有 sudo 的情况下运行需要 /dev/mem 权限的 Python 脚本
- python - 如何使用 Python 将 128 位 AES 加密密钥转换为字符串?
- c - 用于记录目的的数字文件标识符,如 __FILE__
- sql-server - SQL Server - 差距和孤岛
- css - 为什么 Safari 视口不能溢出?
- java - 如何从数字列表中随机填充多个 TextView?
- apache-kafka - Kafka Rest Proxy JSON 模式验证