我正在尝试计算两个节点之间的关系数量,这些节点重复了一次以上。因为我正在使用MERGE
条款。那么,是否有可能计算关系重复是否超过一次。在图形上我看不到因为在使用MERGE
子句时,如果节点和关系相同,则所有关系都会合并。但在我的数据重复确实存在。例如,如果节点A
调用节点B
,则此调用关系超过10次。当我将使用MERGE
子句时,它只会出现一次,这有利于避免图中的重复。但我可以用cypher查询计算这些重复吗?
提前致谢
答案 0 :(得分:1)
如果您有(a)-[:CALLS]->(b)
,那么计算a和b之间的CALLS关系数量的方式将是
MATCH (a)-[r:CALLS]->(b)
RETURN COUNT(r)
但是,您还说您使用的MERGE
只应在a和b之间创建一个CALLS
关系。
如果您确定a和b之间存在多个CALLS
关系,则MERGE
的使用不正确,或者在您开始使用MERGE
之前存在这些关系。
无论哪种方式,如果存在多个,则Neo4j浏览器(2.2之后)将显示a和b之间的良好弯曲关系,并且上述查询将确认该事实。
答案 1 :(得分:0)
我使用以下内容的变体来审核重复的关系:
MATCH
(a)-[r]->(b)
WITH
id(a) AS id_a, id(b) AS id_b, type(r) AS type_r, count(*) AS count_r
WHERE
count_r > 1
RETURN
type_r, count_r
LIMIT 10
您需要小心,因为重复项也可能有效,因为它们可能包含其中包含的不同属性值。但是,正如您所说,您在创建时使用MERGE,您不应该得到重复。您是否可以确保使用正确的MERGE语句,该语句要求关系独立于属于该关系的节点中的任何新值或更改值进行合并。您可能希望发布代码示例以便正确查看。
答案 2 :(得分:0)
如果要获取重复的关系,可以使用以下查询:
MATCH (a)-[r]->(b)
WITH
a, b, type(r) as typer, count(r) as countr
WHERE
countr>1
RETURN
a, b, typer, countr
例如,如果您有以下数据:
John-打电话-> Sally
John-打电话-> Sally
莎拉-致电->汤姆
艾米-电话->莉莉
艾米-电话->莉莉
艾米-电话->莉莉
查询将返回:
a b typer countr
John Sally calls 2
Amy Lily calls 3