neo4j - 所有孩子的 Neo4j 循环
问题描述
如您所见,它们是通过 NEXT 或 NEXT_SIBLING 关系连接的兄弟姐妹;此外,第一个和最后一个孩子通过 FIRST_CHILD_OF 和 LAST_CHILD_OF 连接到父亲。
我只是想找到一种循环它们的方法,以创建一个单一的字符串,即“ABC D”。
是否有一个 Cypher 查询能够做到这一点?
解决方案
创建模型
为了方便可能的进一步答案和解决方案,我记下了我的图表创建声明:
CREATE
(ormText:OrmText {name: 'orm_Text'})<-[:FIRST_CHILD_OF]-(letterA:Letter {name: 'A'}),
(letterA)-[:NEXT]->(letterB:Letter {name: 'B'}),
(letterA)-[:NEXT_SIBLING]->(letterB),
(letterB)-[:NEXT]->(letterC:Letter {name: 'C'}),
(letterB)-[:NEXT_SIBLING]->(letterC),
(letterC)-[:NEXT]->(letterD:Letter {name: 'D'}),
(letterC)-[:NEXT_SIBLING]->(letterD),
(letterD)-[:LAST_CHILD_OF]->(ormText);
解决方案
MATCH
letterPath = (startLetter)-[:NEXT|NEXT_SIBLING*]->(endLetter)
WHERE
(startLetter)-[:FIRST_CHILD_OF]->(:OrmText)<-[:LAST_CHILD_OF]-(endLetter)
WITH nodes(letterPath) AS letterNodes
UNWIND letterNodes AS letterNode
RETURN DISTINCT letterNode.name AS letterName;
第二行检测 的startLetter
第一个子项orm_Text
和 的endLetter
最后一个子项orm_Text
。在第五行计算开始和结束字母之间的路径,在第六行提取其节点。第 7 行创建单节点,第 8 行最终返回结果。
注意:通过编写-[:NEXT|NEX_SIBLING*]->
类型NEXT
或 NEXT_SIBLING
对匹配有效的关系。如果您的要求只需要一种特定类型,请删除另一种和|
.
结果
╒════════════╕
│"letterName"│
╞════════════╡
│"A" │
├────────────┤
│"B" │
├────────────┤
│"C" │
├────────────┤
│"D" │
└────────────┘
扩大
如果您更喜欢单个String
而不是节点名称列表的输出,请查看以下解决方案。
解决方案
MATCH
letterPath = (startLetter)-[:NEXT|NEXT_SIBLING*]->(endLetter)
WHERE
(startLetter)-[:FIRST_CHILD_OF]->(:OrmText)<-[:LAST_CHILD_OF]-(endLetter)
WITH nodes(letterPath) AS letterNodes
RETURN DISTINCT reduce(s=head(letterNodes).name, n in tail(letterNodes) | s+" -> "+n.name) AS letterString;
结果
╒══════════════════╕
│"letterString" │
╞══════════════════╡
│"A -> B -> C -> D"│
└──────────────────┘
推荐阅读
- google-tag-manager - 验证后的 Google 跟踪代码管理器触发器 - 页面路径或页面 URL 星标不起作用
- jsp - 在 EL 中使用 getter 而不是字段名更安全吗?
- java - 如何处理数组类型的Java默认构造函数参数?(没有静态工厂方法或构建器模式)
- angular - 如何在 Angular 8.2.14 中正确使用 ngStyle?
- python - Python - 如何通过 for 循环组合数据帧?
- python - 理解 Python 中的访问器和修改器
- java - 如何将日期字符串转换为 joda DateTime?
- swift - 如何在swift中向textview文本添加两种不同的字体大小
- exchange-server - 获取 DL 的成员
- java - 如何搜索数据库以验证它是否存在?