Graph Neo 4j-如何计算两个关系在同一节点中出现的次数

Graph Neo 4j-如何计算两个关系在同一节点中出现的次数,graph,neo4j,cypher,Graph,Neo4j,Cypher,假设我有3个节点A、B和C,以及两个关系r1和r2,我如何计算这两个关系在相同节点上出现的次数?例如: A-[r1]-B A-[r2]-B A-[r1]-C B-[r1]-C B-[r2]-C 如您所见,r1出现3次,r2出现2次,但在相同的节点上,我们有A-[r1:r2]-B和B[r1:r2]-C,所以我要查找的计数值是2,因为A和B,B和C之间都有两个关系 对于可能的重复,我对计算两个节点之间的关系发生的次数不感兴趣,我想计算所有发生的次数。 我的英语很抱歉,谢谢你。1。你的图表 为了便

假设我有3个节点A、B和C,以及两个关系r1和r2,我如何计算这两个关系在相同节点上出现的次数?例如:

A-[r1]-B
A-[r2]-B

A-[r1]-C
B-[r1]-C
B-[r2]-C
如您所见,r1出现3次,r2出现2次,但在相同的节点上,我们有A-[r1:r2]-B和B[r1:r2]-C,所以我要查找的计数值是2,因为A和B,B和C之间都有两个关系

对于可能的重复,我对计算两个节点之间的关系发生的次数不感兴趣,我想计算所有发生的次数。 我的英语很抱歉,谢谢你。

1。你的图表 为了便于进一步回答和解决问题,我注意到我的图表创建声明:

CREATE
  (a:NodeA {name: 'A'})-[:RelationType1]->(b:NodeB {name: 'B'}),
  (a)-[:RelationType2]->(b),
  (a)-[:RelationType1]->(c:NodeC {name: 'C'}),
  (b)-[:RelationType1]->(c),
  (b)-[:RelationType2]->(c);
2.渲染事件 2.1解决方案 3.计数事件 3.1解决办法
我假设你的意思是2个节点之间有2个关系的次数,但是这里的想法是保持密码简单,这样你匹配的模式就可以很好地即插即用了。可以使用“大小”来计算节点之间特定图案的出现次数,并使用“存在”来测试该图案是否存在。在这里,我们使用where查找符合我们感兴趣的模式的节点对,然后返回行数作为该模式出现的计数

MATCH (a), (b)
WHERE ID(a) > ID(b) // create distinction between a and b
AND SIZE((a)--(b)) = 2 // match the pattern we are looking for between them
RETURN COUNT(*) as occurrences // return count

模式也可以是EXISTSa-[:r1]-b-[:r2]-注意,其中EXISTSa-b等同于其中的a-b,但第一种形式更为清晰

可能与@Tezra Hi重复,我不这么认为。谢谢,这似乎是正确的方法!我将尝试一下数据库中还有其他关系,我需要能够指定要检查的两个关系是否同时存在于同一个数据库中nodes@WolganEns只需将查询中的模式替换为要匹配的模式即可。如果不需要检查每对的模式发生率,只需使用EXISTS而不是SIZE=。我已经给出了指定关系类型的EXISTS表单,因此我不确定您要计算的模式到底是什么。请注意,此解决方案涉及笛卡尔积-对于大图来说,它不是最优的。
╒═══════════════╤═════════════╕
│"startNodeName"│"endNodeName"│
╞═══════════════╪═════════════╡
│"A"            │"B"          │
├───────────────┼─────────────┤
│"B"            │"C"          │
└───────────────┴─────────────┘
MATCH
  (startNode)-[:RelationType1]-(endNode)-[:RelationType2]-(startNode)
  WHERE
  id(startNode) < id(endNode)
RETURN
  count(startNode) AS amount;
╒════════╕
│"amount"│
╞════════╡
│2       │
└────────┘
MATCH (a), (b)
WHERE ID(a) > ID(b) // create distinction between a and b
AND SIZE((a)--(b)) = 2 // match the pattern we are looking for between them
RETURN COUNT(*) as occurrences // return count