Graph 如何计算neo4j中关系的重复

Graph 如何计算neo4j中关系的重复,graph,neo4j,cypher,Graph,Neo4j,Cypher,我试图计算两个节点之间重复多次的关系数。当我使用MERGE子句时。那么,是否有可能计算这些关系是否重复了不止一次。从图形上看,我看不到,因为在使用MERGE子句时,如果节点和关系相同,则所有关系都会合并。但在我的数据中,重复确实存在。例如,如果节点A调用节点B,并且此调用关系超过10次。当我使用MERGE子句时,它只会出现一次,这有助于避免图中的重复。但是我可以用密码查询来计算这些重复吗? 提前感谢如果您有(a)-[:CALLS]->(b)那么计算a和b之间的呼叫数关系的方法是 MATCH (a

我试图计算两个节点之间重复多次的关系数。当我使用
MERGE
子句时。那么,是否有可能计算这些关系是否重复了不止一次。从图形上看,我看不到,因为在使用
MERGE
子句时,如果节点和关系相同,则所有关系都会合并。但在我的数据中,重复确实存在。例如,如果节点
A
调用节点
B
,并且此调用关系超过10次。当我使用
MERGE
子句时,它只会出现一次,这有助于避免图中的重复。但是我可以用密码查询来计算这些重复吗? 提前感谢

如果您有
(a)-[:CALLS]->(b)
那么计算a和b之间的呼叫数关系的方法是

MATCH (a)-[r:CALLS]->(b) 
RETURN COUNT(r)
但是,您还说您正在使用
MERGE
,它应该只在a和b之间创建一个
调用
关系

如果您确定a和b之间存在多个
调用
关系,则
合并
的用法不正确,或者这些关系在您开始使用
合并
之前就存在


无论哪种方式,Neo4j浏览器(post 2.2)都会显示a和b之间的良好曲线关系(如果存在多个曲线关系),上面的查询将确认这一事实。

我使用以下变量来查看重复关系:

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语句,该语句要求独立于属于关系的节点中的任何新值或更改值合并关系。您可能希望发布代码示例,以便正确地查看它。

如果您希望获得重复的关系,可以使用以下查询:

MATCH (a)-[r]->(b)
WITH 
    a, b, type(r) as typer, count(r) as countr
WHERE 
    countr>1
RETURN
    a, b, typer, countr
例如,如果您有以下数据:

约翰-呼叫->萨利

约翰-呼叫->萨利

莎拉打电话给汤姆

艾米-呼叫->莉莉

艾米-呼叫->莉莉

艾米-呼叫->莉莉

查询将返回:

a        b         typer        countr
John     Sally     calls     2 
Amy      Lily      calls     3

谢谢Luane,问题是我不想重复图形数据库中的数据。这样我就可以查看节点之间的关系。这意味着没有其他方法来计算合并的关系。对吗?如果使用“合并”,则保证节点之间最多有一个关系(前提是之前不存在任何关系),因此计数将为1或零。还要注意,如果
拥有任何唯一属性,则每次都会创建一个新关系。例如,
MERGE(a)-[:CALLS{created:TIMESTAMP()}]->(b)
将在每次执行查询时创建一个新的
:CALLS
关系。我尝试了这个方法,但实际上并不计算重复的关系。即使存在重复项,计数也将始终为1。@Nadine,不确定为什么或何时停止工作。我调整了当前的语法。