Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何显示所有节点和关系';从Neo4j路径按顺序命名_Neo4j_Path_Cypher - Fatal编程技术网

如何显示所有节点和关系';从Neo4j路径按顺序命名

如何显示所有节点和关系';从Neo4j路径按顺序命名,neo4j,path,cypher,Neo4j,Path,Cypher,我想知道如何在Neo4j-Cypher中显示由路径p生成的每个节点和关系的名称 我有一个疑问: MATCH (m { name: 'porsche' }),(n { name: 'vehicle' }), p =(m)-[r*]->(n) return collect(p); ══════════════════════════════╕ │"collect(p)" │ ╞══════════════════════════════╡ │[[{"nam

我想知道如何在Neo4j-Cypher中显示由路径p生成的每个节点和关系的名称

我有一个疑问:

MATCH (m { name: 'porsche' }),(n { name: 'vehicle' }), p =(m)-[r*]->(n) 
return collect(p);
 ══════════════════════════════╕
│"collect(p)"                  │
╞══════════════════════════════╡
│[[{"name":"porsche"},{"name":"│
│is a"},{"name":"car","type":"l│
│abel"},{"name":"car","type":"l│
│abel"},{"name":"is a subtype o│
│f"},{"name":"vehicle","type":"│
│label"}],[{"name":"porsche"},{│
│"name":"is a"},{"name":"car","│
│type":"label"},{"name":"car","│
│type":"label"},{},{"name":"veh│
│icle","type":"label"}]]       │
└──────────────────────────────┘
但我希望它能按如下顺序显示每个节点的名称和每个关系的名称:

'porsche' 'is a' 'car'
'car' 'is a subtype of' vehicle
问题中显示的输出表明您的数据格式不正确。例如,并非所有关系实际上都有
名称
。此答案假设数据格式良好,但如果需要,可以调整以处理缺少的
name
属性

因为你的问题不清楚你想要什么,这里有一些选择

选择1 此查询将为每个路径的每个关系返回名称三元组(在列表中):

MATCH ({ name: 'porsche' })-[rels*]->({ name: 'vehicle' })
WITH [r IN rels | [STARTNODE(r).name, r.name, ENDNODE(r).name]] AS steps
UNWIND steps AS step
RETURN step;
[["porsche", "is a", "car"], ["car", "is a subtype of", "vehicle"]]
示例输出(对于一条路径):

选择2 如果您想将每个路径的结果分开,可以将
UNWIND path_名称替换为name返回名称带有
返回路径\u名称。这将为每条路径产生如下结果:

MATCH ({ name: 'porsche' })-[rels*]->({ name: 'vehicle' })
WITH [r IN rels | [STARTNODE(r).name, r.name, ENDNODE(r).name]] AS steps
UNWIND steps AS step
RETURN step;
[["porsche", "is a", "car"], ["car", "is a subtype of", "vehicle"]]
选择3 如果要从所有路径中获得不同的“步骤”,可以执行以下操作:

MATCH ({ name: 'porsche' })-[rels*]->({ name: 'vehicle' })
WITH [r IN rels | [STARTNODE(r).name, r.name, ENDNODE(r).name]] AS steps
UNWIND steps AS step
RETURN DISTINCT step;

结果将与选项1的结果相似,只是每个“步骤”都是不同的。

请与我们共享Cypher查询以创建初始数据集。回答非常好!谢谢我想知道,如何获得这样的输出,使每个节点/关系只接触一次:[“porsche”、“is a”、“car”、“is a subtype of”、“vehicle”]。我不希望列表被分开,而是希望它们在using path=中被遍历。你能用path=解决同样的问题吗?再次感谢!嘿,再次谢谢你!我想知道,我如何得到一个完整的输出,像这样的字符串:“保时捷是一辆汽车”,“汽车是汽车的一个子类型”。此外,我如何添加和检测冗余并替换它们以获得这样的输出:“保时捷是一辆汽车,它是汽车的一个子类型”。如果可能的话,我将不胜感激,但是“步骤”不能是明确的,因为一个步骤可能出现在多个生成的句子中。但是,我会努力的。