neo4j cypher计算相同类型节点之间的关系

时间:2015-03-05 21:29:15

标签: count neo4j match cypher

我在图形数据库中太新了,我在从这样的模型中获取数据时遇到了问题。

enter image description here

我正在尝试计算User1和同一组中的所有其他用户之间的常见喜欢。以下是我想要获得的结果 User1

User , Count, Drinks
User3,     2, [ Cola, Beer ]
User2,     1, [ Cola ]
User5,     1, [ Tea ]
User4,     0, [ ]
User6,     0, [ ]

这似乎很容易,但不适合我。

我可以获得用户和计数与用户有关系但没有关系的用户。请有人帮我这个吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

我建议的解决方案有以下逻辑:

  • 找到用户1
  • 查找非用户1的其他用户
  • 为user1,饮品和其他用户的当前迭代之间的路径找到OPTIONAL MATCH

这基于以下测试图:

http://console.neo4j.org/r/xc3cqt

查询:

MATCH (u:User { id:1 })
MATCH (o:User)
WHERE o <> u
OPTIONAL MATCH (u)-[r:LIKES]->(d)<-[:LIKES]-(o)
RETURN o.id, count(r) as c, collect(DISTINCT (d.name)) AS drink

您提供的图表的结果:

o.id    c           drink
2       1           [Cola]
5       1           [Tea]
4       0           []
3       2           [Beer, Cola]
6       0           []