我正在使用Neo4j
用于图形数据库,并使用Java从中提取路径。
我的路径如下:
[(3)--[KNOWS,5]-->(4)--[KNOWS,6]-->(5)--[KNOWS,9]-->(6)--[KNOWS,10]-->(7)--[KNOWS,12]-->(9)]
我想用它们的属性替换路径中的节点ID。
恩。对于属性为"name=ABC"
的节点ID 3,输出应为"[(ABC)--[KNOWS,5]....]"
怎么做?
答案 0 :(得分:2)
我假设我们显示的输出是Path.toString()。没有直接的方法来配置不同的输出方式。但是,您可以轻松地遍历路径并创建自己的路径字符串表示形式:
String myCustomPathToString(Path path) {
StringBuilder sb = new StringBuilder();
Node lastNode = null;
for (PropertyContainer propertyContainer: path) {
if (propertyContainer instanceof Node) {
lastNode = (Node)propertyContainer
Object default = lastNode.getId(); // as fallback
sb.append("(").append(propertyContainer.getProperty("name", default).append(")");
}
if (propertyContainer instanceof Relationship) {
Relationship rel = (Relationship)propertyContainer ;
Object id = rel.getId();
if (rel.getEndNode().equals(lastNode)) sb.append("<");
sb.append("--[").append(rel.getType().name()).append(",").append(id).append("]--");
if (rel.getStartNode().equals(lastNode)) sb.append(">");
}
}
return sb.toString();
}
免责声明:我没有测试上面的代码片段,因此它更像是一个指导而非工作示例。
答案 1 :(得分:1)
对于Cypher,您可以使用extract:
START n=node:index(key="value")
MATCH path=n-[:KNOWS*..5]-m
RETURN extract(x in nodes(path) : x.name)
如果你想保持关系,你可以这样做:
RETURN extract(x in path : coalesce(x.name?,ID(x)+":"+type(x)))