如何计算neo4j中关系的重复次数

uplii1fm  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(173)

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

yduiuuwa

yduiuuwa1#

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

MATCH (a)-[r:CALLS]->(b) 
RETURN COUNT(r)

字符串
然而,你也说你正在使用MERGE,这应该只在a和b之间创建一个CALLS关系。
如果您确定a和b之间存在多个CALLS关系,则MERGE的使用不正确,或者这些关系在您开始使用MERGE之前就存在。
无论哪种方式,Neo4j浏览器(post 2.2)都会在a和b之间显示出良好的曲线关系,如果存在不止一个,上面的查询将确认这一事实。

axkjgtzd

axkjgtzd2#

如果你想得到重复的关系,你可以使用这个查询:

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

disbfnqx

disbfnqx3#

为了检查重复的关系,我使用以下变量:

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

2w3kk1z5

2w3kk1z54#

如果你想用图表的方式看结果...

MATCH p=(a)-[r]->(b)
WITH b, collect(p) AS pl
WHERE size(pl) > 1
UNWIND pl AS p
RETURN p

字符串

相关问题