我在Neo4J中有一组家族树的数据,我正在尝试构建一个Cypher查询,该查询生成类似于以下内容的
JSON数据集:
{Name: "Bob",parents: [ {Name: "Roger",parents: [ Name: "Robert",Name: "Jessica" ]},{Name: "Susan",parents: [ Name: "George",Name: "Susan" ]} ]}
我的图与MEMBER节点之间的PARENT关系(即MATCH(p.Member) – [:PARENT] – >(c.Member)).我发现Nested has_many relationships in cypher和neo4j cypher nested collect最终将所有父母分组在一起,为我正在搜索的主要子节点.
根据反馈添加一些清晰度:
每个成员都有唯一的标识符.工会目前都与父母关系有关.所有内容都被编入索引,以便性能不会受到影响.当我运行查询以返回节点图时,我得到了我期望的结果.我正在尝试返回一个输出,我可以将其用于D3的可视化目的.理想情况下,这将通过Cypher查询完成,因为我正在使用API从正在构建的前端访问neo4j.
MATCH (p:Person)-[:PARENT*1..5]->(c:Person) WHERE c.FirstName = 'Bob' RETURN p.FirstName,c.FirstName
此查询返回五代的每个父级列表,但不是显示层次结构,而是将“Bob”列为每个关系的子级.是否有Cypher查询至少会显示数据中的每个关系?我可以根据需要格式化它…
解决方法
你可能也看看
Rik van Bruggens Blog on his family data:
关于你的查询
您已在此处创建路径模式:(p:Person) – [:PARENT * 1..5] – >(c:Person)您可以将其分配给变量树,然后对该变量进行操作,例如:返回树,或节点(树)或rels(树)或以其他方式对该集合进行操作:
MATCH tree = (p:Person)-[:PARENT*1..5]->(c:Person) WHERE c.FirstName = 'Bob' RETURN nodes(tree),rels(tree),tree,length(tree),[n in nodes(tree) | n.FirstName] as names
有关Cypher的更多信息,另请参阅密码参考卡:http://neo4j.com/docs/stable/cypher-refcard和在线培训http://neo4j.com/online-training.
别忘了
create index on :Person(FirstName);