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,不确定为什么或何时停止工作。我调整了当前的语法。