删除密码查询输出的自同构

问题描述

在执行 Cypher 查询以检索具有自同构的特定子图时,比方说

MATCH (a)-[:X]-(b)-[:X]-(c),RETURN a,b,c

似乎默认行为是返回每个检索到的子图及其所有自同构。 在那个例子中,如果 (u)-[:X]-(v)-[:X]-(w) 是一个匹配模式的图,输出将是 u,v,w 也是 w,u,包含在同一个图中。

有没有办法只检索每个子图一次?

编辑:如果 Cypher 具有在搜索中执行此操作的功能,使用某种对称破坏条件,因为它会减少计算时间,那就太好了。如果不是这种情况,您将如何进行后处理以找到所需的输出?

解决方法

在您进行的查询中,(a)-[r:X]-(b)(a)-[t:X]-(c) 指代类似的模式。因为(b)和(c)可以互换。什么是需要重复匹配两次? MATCH (a)-[r:X]-(b) RETURN a,r,b 返回您要查找的所有子图。

编辑

您可以执行以下操作来查找具有两个 X 类型关系的节点。

MATCH (a)-[r:X]-(b) WHERE size((a)-[:X]-()) = 2 RETURN a,b
,

对于这种镜像模式,我们可以对内部图 id 添加一个限制,以便只保留两条路径之一:

MATCH (a)-[:X]-(b)-[:X]-(c)
WHERE id(a) < id(c)
RETURN a,b,c

这也将防止出现 a = c 的情况。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...