在 Neo4J 数据库中查找高权重的共同好友

问题描述 投票:0回答:1

我是图数据库新手,我正在建立朋友关系。所以,在屏幕截图中,您可以看到 R<->A、R<->B、R<->C(<-> 彼此跟随),现在您可以看到 A->D、E、G、H 和 B->D、F, G,H 和 C->H,我现在可以看到 H 在所有这些中都是公共的,并且 D 和 G 节点对于 A 和 B 来说是公共的。因此,H 很有可能是 R 和 D 的朋友,并且G也是R的朋友。 那么,有人知道如何编写密码查询来获取 H、D 和 G 节点吗?

graph neo4j cypher spring-data-neo4j
1个回答
0
投票

一个选项是:

MATCH (r{name: 'R'})-->()-->(b)
WITH count(b) as itemsCount, b.name as name
WHERE itemsCount >= 2
RETURN name, itemsCount

示例数据:

MERGE (nr:Node {name:"R"})
MERGE (na:Node {name:"A"})
MERGE (nb:Node {name:"B"})
MERGE (nc:Node {name:"C"})
MERGE (nd:Node {name:"D"})
MERGE (ne:Node {name:"E"})
MERGE (nf:Node {name:"F"})
MERGE (ng:Node {name:"G"})
MERGE (nh:Node {name:"H"})
MERGE (ni:Node {name:"I"})


MERGE (nr)-[:FOLLOWS]->(na)
MERGE (nr)-[:FOLLOWS]->(nb)
MERGE (nr)-[:FOLLOWS]->(nc)
MERGE (na)-[:FOLLOWS]->(nd)
MERGE (na)-[:FOLLOWS]->(ne)
MERGE (na)-[:FOLLOWS]->(ng)
MERGE (na)-[:FOLLOWS]->(nh)
MERGE (nb)-[:FOLLOWS]->(nd)
MERGE (nb)-[:FOLLOWS]->(nf)
MERGE (nb)-[:FOLLOWS]->(ng)
MERGE (nb)-[:FOLLOWS]->(nh)
MERGE (nc)-[:FOLLOWS]->(nh)
MERGE (nc)-[:FOLLOWS]->(ni)

返回:

╒════╤══════════╕
│name│itemsCount│
╞════╪══════════╡
│"H" │3         │
├────┼──────────┤
│"D" │2         │
├────┼──────────┤
│"G" │2         │
└────┴──────────┘
© www.soinside.com 2019 - 2024. All rights reserved.