graph - Neo4j Cypher 获取链表中的所有节点
问题描述
使用下图:
(Boxer)-[:starts]->(Round)-[:continues]->(Round)-[:continues]->(Round)-[:continues]->(Round)
如何让特定拳击手完成所有回合?
现在,我只能通过以下方式从所有拳击手那里获得所有回合:(我错过了第一轮,因为第一个关系是开始而不是继续。
MATCH (boxer:Boxer {id: 5})
MATCH ()-[:continues]->(round:Round)
RETURN
boxer {
.*,
rounds: collect(distinct round {
.*
})
} as boxer
解决方案
这可能对您有用:
MATCH p = (boxer:Boxer)-[:starts]->()-[:continues*0..]->(lastRound)
WHERE boxer.id = 5 AND NOT (lastRound)-[:continues]->()
RETURN boxer {
.*,
rounds: NODES(p)[1..]
} as boxer
- 可变长度关系模式
[:continues*0..]
用作0
下限,以防回合只有一轮。 - 测试过滤在叶节点处结束的
NOT (lastRound)-[:continues]->()
路径,以便MATCH
仅获取整个回合的路径。 - 返回的
rounds
属性应包含回合中的所有回合。 - 此查询假定
starts
和continues
关系类型始终具有Round
结束节点,因此为了提高效率,我们不必费心在MATCH
模式中指定这些节点标签。
推荐阅读
- python - 将文本附加到我的谷歌驱动器上的文本文件(Python)
- bash - 如何使用bash文件计算文本文件中的特定单词
- python - TypeError:无法根据规则“安全”将数组数据从 dtype('int64') 转换为 dtype('int32')
- informatica - 如何在表中捕获会话级别的详细信息
- javascript - Javascript中的对象到原始转换:为什么不调用valueOf()方法,因为没有toString()方法
- php - 数据库中表中文本旁边的标志图标
- sql - Oracle DDL 错误 - ORA 00907:缺少右括号
- python - 在一个 numpy 零数组中分配元素
- laravel - 无法下载 Laravel UI 包
- database - 数据库决策 - Cassandra 或 PostGres