apoc.paths.toJsonTree
|
尽管其名称如此,此过程并不输出 JSON。 |
语法 |
|
||
描述 |
通过遍历传出关系,创建表示图为树的嵌套文档流。 |
||
输入参数 |
名称 |
类型 |
描述 |
|
|
要转换为树的路径列表。 |
|
|
|
是否将关系类型转换为小写。默认值为: |
|
|
|
|
|
返回参数 |
名称 |
类型 |
描述 |
|
|
结果树。 |
|
配置参数
该过程支持以下配置参数
| 名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
|
|
{} |
每个节点标签要包含或排除的属性,例如:包含 |
|
|
{} |
每个关系类型要包含或排除的属性,例如:包含 |
|
|
true |
按路径长度排序结果。 |
使用示例
本节中的示例基于以下示例图
CREATE (Keanu:Person {name:'Keanu Reeves', born:1964})
CREATE (TomH:Person {name:'Tom Hanks', born:1956})
CREATE (TomT:Person {name:'Tom Tykwer', born:1965})
CREATE (JamesThompson:Person {name:'James Thompson'})
CREATE (TheMatrix:Movie {title:'The Matrix', released:1999, tagline:'Welcome to the Real World'})
CREATE (TheMatrixReloaded:Movie {title:'The Matrix Reloaded', released:2003, tagline:'Free your mind'})
CREATE (TheMatrixRevolutions:Movie {title:'The Matrix Revolutions', released:2003, tagline:'Everything that has a beginning has an end'})
CREATE (SomethingsGottaGive:Movie {title:"Something's Gotta Give", released:2003})
CREATE (TheDevilsAdvocate:Movie {title:"The Devil's Advocate", released:1997, tagline:'Evil has its winning ways'})
CREATE (YouveGotMail:Movie {title:"You've Got Mail", released:1998, tagline:'At odds in life... in love on-line.'})
CREATE (SleeplessInSeattle:Movie {title:'Sleepless in Seattle', released:1993, tagline:'What if someone you never met, someone you never saw, someone you never knew was the only someone for you?'})
CREATE (ThatThingYouDo:Movie {title:'That Thing You Do', released:1996, tagline:'In every life there comes a time when that thing you dream becomes that thing you do'})
CREATE (CloudAtlas:Movie {title:'Cloud Atlas', released:2012, tagline:'Everything is connected'})
CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrix)
CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixReloaded)
CREATE (Keanu)-[:ACTED_IN {roles:['Neo']}]->(TheMatrixRevolutions)
CREATE (Keanu)-[:ACTED_IN {roles:['Julian Mercer']}]->(SomethingsGottaGive)
CREATE (Keanu)-[:ACTED_IN {roles:['Kevin Lomax']}]->(TheDevilsAdvocate)
CREATE (TomH)-[:ACTED_IN {roles:['Joe Fox']}]->(YouveGotMail)
CREATE (TomH)-[:ACTED_IN {roles:['Sam Baldwin']}]->(SleeplessInSeattle)
CREATE (TomH)-[:ACTED_IN {roles:['Mr. White']}]->(ThatThingYouDo)
CREATE (TomH)-[:ACTED_IN {roles:['Zachry', 'Dr. Henry Goose', 'Isaac Sachs', 'Dermot Hoggins']}]->(CloudAtlas)
CREATE (TomT)-[:DIRECTED]->(CloudAtlas)
CREATE (JamesThompson)-[:REVIEWED {summary:'Enjoyed it!', rating:95}]->(TheMatrix)
CREATE (JamesThompson)-[:REVIEWED {summary:'It was alright.', rating:65}]->(TheMatrixReloaded)
CREATE (JamesThompson)-[:REVIEWED {summary:'The best of the three', rating:100}]->(TheMatrixRevolutions);
以下将基努·里维斯电影的路径列表转换为嵌套映射
MATCH path = (p:Person {name: "Keanu Reeves"})-[:ACTED_IN]->(movie)
WITH collect(path) AS paths
CALL apoc.paths.toJsonTree(paths)
YIELD value
RETURN value;
| value |
|---|
|
默认情况下,关系类型会转换为小写。要保留原始大小写,请为第二个参数(lowerCaseRels)传递 false。
MATCH path = (p:Person {name: "Keanu Reeves"})-[:ACTED_IN]->(movie)
WITH collect(path) AS paths
CALL apoc.paths.toJsonTree(paths, false)
YIELD value
RETURN value;
| value |
|---|
|
默认情况下,节点标签和关系类型的所有属性都包含在内。要限制节点的属性,请使用 nodes 配置键。对于关系类型,请使用 rels 配置键。
以下查询演示了如何通过设置 nodes 配置键来仅返回 Movie 节点的 title 属性
MATCH path = (p:Person {name: "Keanu Reeves"})-[:ACTED_IN]->(movie)
WITH collect(path) AS paths
CALL apoc.paths.toJsonTree(paths, true, {
nodes: {Movie: ['title']}
})
YIELD value
RETURN value;
| value |
|---|
|
以下查询演示了如何返回 James Thompson 评论的 REVIEWED 关系的 rating 属性和 Movie 节点的 title 属性
MATCH path = (p:Person {name:'James Thompson'})-[:REVIEWED]->(movie)
WITH collect(path) AS paths
CALL apoc.paths.toJsonTree(paths, true, {
nodes: {Movie: ['title']},
rels: {reviewed: ['rating']}
})
YIELD value
RETURN value;
| value |
|---|
|
也可以通过在属性前加上减号 (-) 来明确排除某些属性。以下查询演示了如何排除 Movie 节点上的 title 属性和 REVIEWED 关系上的 rating 属性。
MATCH path = (p:Person {name:'James Thompson'})-[:REVIEWED]->(movie)
WITH collect(path) AS paths
CALL apoc.paths.toJsonTree(paths, true, {
nodes: {Movie: ['-title']},
rels: {reviewed: ['-rating']}
})
YIELD value
RETURN value;
| value |
|---|
|