我有一个由活动目录生成的组织的neo4j图。
唯一存在的关系是MANAGE,节点1是根节点(组织的顶部),所有其他成员最终通过MANAGE关系向节点1报告。
我没有触及Neo4j遍历,但我想提供一个以逗号分隔的用户名列表,并生成一个由
组成的树结构根节点< - 儿童至LCA和LCA< - 儿童
我已经可以在Neo4j中获得LCA,我只需要找出去那里的地方。
String users = "tom,sarah,liam";
List<Node> nodeSet = new ArrayList<Node>();
String usernames[] = users.split(",");
for (String user : usernames) {
Node found = nodeIndex.get("username", user).getSingle();
if (found != null) nodeSet.add(found);
}
Node lca = getLCA(nodeSet);
private Node getLCA(List<Node> nodes) {
RelationshipExpander expander = Traversal.expanderForTypes(RelTypes.MANAGE, Direction.INCOMING);
return AncestorsUtil.lowestCommonAncestor(nodes, expander);
}
因此,如果我提供“sarah,tom,liam”列表,将创建以下结构:
Root
|
|
|
John
|
Jane
/ \
Sarah Jerome
/ \
Liam Tom
我想用XML或JSON这样做:( XML示例如下)
<user>
<name>Root</name>
<children>
<user>
<name>John</name>
<children>
<user>
<name>Jane</name>
<children>
<user>
<name>Sarah</name>
</user>
<user>
<name>Jerome</name>
<children>
<user>
<name>Liam</name>
</user>
<user>
<name>Tom</name>
</user>
</children>
</user>
</children>
</user>
</children>
</user>
</children>
</user>
有人能指出我在哪里开始的正确方向吗?
答案 0 :(得分:1)
类似的东西:http://console.neo4j.org/r/canhtg
start n=node(0)
match path=n-[:MANAGE*]-m
with nodes(path) as nodes, length(path) as l
return head(nodes), head(tail(nodes)),tail(tail(nodes)),l
它的作用是: