我试图计算两个节点之间重复超过一次的关系的数量。因为我使用MERGE子句。所以,是否有任何可能性来计算,如果关系重复一次以上.图形上我不能看到,因为当使用MERGE子句时,如果节点和关系是相同的,所有的关系合并.但在我的数据重复确实存在.例如,如果节点A调用节点B,并且这种调用关系超过10次。当我使用MERGE子句时,它将只出现一次,这有助于避免图中的重复。但是我可以用密码查询来计算这种重复吗?提前感谢
MERGE
A
B
yduiuuwa1#
如果你有(a)-[:CALLS]->(b),那么计算a和b之间的CALLS关系的方法是
(a)-[:CALLS]->(b)
MATCH (a)-[r:CALLS]->(b) RETURN COUNT(r)
字符串然而,你也说你正在使用MERGE,这应该只在a和b之间创建一个CALLS关系。如果您确定a和b之间存在多个CALLS关系,则MERGE的使用不正确,或者这些关系在您开始使用MERGE之前就存在。无论哪种方式,Neo4j浏览器(post 2.2)都会在a和b之间显示出良好的曲线关系,如果存在不止一个,上面的查询将确认这一事实。
CALLS
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
型
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语句,它要求关系独立于关系中节点的任何新值或更改值进行合并。您可能希望发布您的代码,以便正确地检查它。
2w3kk1z54#
如果你想用图表的方式看结果...
MATCH p=(a)-[r]->(b) WITH b, collect(p) AS pl WHERE size(pl) > 1 UNWIND pl AS p RETURN p
字符串
4条答案
按热度按时间yduiuuwa1#
如果你有
(a)-[:CALLS]->(b)
,那么计算a和b之间的CALLS关系的方法是字符串
然而,你也说你正在使用
MERGE
,这应该只在a和b之间创建一个CALLS
关系。如果您确定a和b之间存在多个
CALLS
关系,则MERGE
的使用不正确,或者这些关系在您开始使用MERGE
之前就存在。无论哪种方式,Neo4j浏览器(post 2.2)都会在a和b之间显示出良好的曲线关系,如果存在不止一个,上面的查询将确认这一事实。
axkjgtzd2#
如果你想得到重复的关系,你可以使用这个查询:
字符串
例如,如果你有这样的数据:
约翰-呼叫->莎莉
约翰-呼叫->莎莉
莎拉-呼叫->汤姆
艾米-呼叫->莉莉
艾米-呼叫->莉莉
艾米-呼叫->莉莉
查询将返回:
型
disbfnqx3#
为了检查重复的关系,我使用以下变量:
字符串
你需要小心,因为重复也可能是有效的,因为它们可能包含不同的属性值。但是,正如你所解释的,你在创建时使用的是MERGE,你不应该得到重复。你能确保你使用的是正确的MERGE语句,它要求关系独立于关系中节点的任何新值或更改值进行合并。您可能希望发布您的代码,以便正确地检查它。
2w3kk1z54#
如果你想用图表的方式看结果...
字符串