适用于所有儿童的Neo4j回路
在Neo4j中,我得到了以下节点: 如你所见,他们是通过关系连接的兄弟姐妹,如下一个或下一个兄弟姐妹;此外,第一个和最后一个孩子通过的第一个和最后一个孩子与父亲相连 我只是想找到一种循环它们的方法,以便创建一个字符串,即“abcdd” 是否有密码查询可以实现此功能?创建您的模型 为了便于进一步回答和解决问题,我注意到我的图表创建声明:适用于所有儿童的Neo4j回路,neo4j,cypher,Neo4j,Cypher,在Neo4j中,我得到了以下节点: 如你所见,他们是通过关系连接的兄弟姐妹,如下一个或下一个兄弟姐妹;此外,第一个和最后一个孩子通过的第一个和最后一个孩子与父亲相连 我只是想找到一种循环它们的方法,以便创建一个字符串,即“abcdd” 是否有密码查询可以实现此功能?创建您的模型 为了便于进一步回答和解决问题,我注意到我的图表创建声明: CREATE (ormText:OrmText {name: 'orm_Text'})<-[:FIRST_CHILD_OF]-(letterA:Let
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);
延伸 如果您希望输出为单个
字符串而不是节点名称列表,请查看以下解决方案
解决方案
谢谢,我理解这种方法,我确信它是正确的,但我得到了错误“Variable或mtext
not defined”。即使在这个变量的开头创建一个新的匹配,也会返回0条记录。“我错过什么了吗?”沃尔:对不起,是我的错。在优化过程中,有些事情稍微出了差错。我更正了两个MATCH
语句,现在应该再次显示渲染结果。@我希望它现在对您有效,并解决了您的难题?要返回或mtext
标签的属性,必须首先指定节点变量,并使用子句循环每个。解决方案:MATCH letterPath=(ormText:ormText)(endLetter:Letter)-[LAST_CHILD_OF]->(ormText),节点(letterPath)作为letterNodes,或mtext.name作为ormTextName,过滤器(letterNodes中的x不是(x:ormText))作为letterNodes,或mtextname返回不同的reduce(s=头(letterNodes)。name,尾中的n(letterNodes)| s+'->'+n.name)作为字母字符串,或mtextname代码>。这将导致{“letterString”:“A->B->C->D”},{“ormTextName”:“orm_Text”}
。
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;
╒════════════╕
│"letterName"│
╞════════════╡
│"A" │
├────────────┤
│"B" │
├────────────┤
│"C" │
├────────────┤
│"D" │
└────────────┘
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"│
└──────────────────┘