我的图表中有地方和人物作为标签,以及关系" knows_the_place"。喜欢:
(person)-[knows_the_place]->(place)
一个人通常知道多个地方。
现在我想找到一个拥有强大"通过地方(有很多"地点和#34;共同点)的关系,所以例如我想查询所有人,分享至少3个不同的地方,像这样(不工作!)查询:
MATCH
(a:person)-[:knows_the_place]->(x:place)<-[:knows_the_place]-(b:person),
(a:person)-[:knows_the_place]->(y:place)<-[:knows_the_place]-(b:person),
(a:person)-[:knows_the_place]->(z:place)<-[:knows_the_place]-(b:person)
WHERE NOT x=y and y=z
RETURN a, b
如何使用neo4j Query执行此操作?
加成-问题:
如果我能获得如下订单列表,而不是向我展示与另一个人有x个共同点的人,那就更好了。
与b共享7个名额 c与b共享5个名额 d与e共享2个名额 f分享1个名额 ...
感谢您的帮助!
答案 0 :(得分:2)
你走了:
MATCH (a:person)-[:knows_the_place]->(x:place)<-[:knows_the_place]-(b:person)
WITH a, b, count(x) AS count
WHERE count >= 3
RETURN a, b, count
订购:
MATCH (a:person)-[:knows_the_place]->(x:place)<-[:knows_the_place]-(b:person)
RETURN a, b, count(x) AS count
ORDER BY count(x) DESC
您也可以通过在第一个查询中添加ORDER BY
来完成这两项工作。
请注意,此查询是a
和b
的笛卡尔积,因此它将检查person
个节点的每个组合,如果您有这些节点可能效果不佳很多person
个节点。 Neo4j 2.3应该警告你这些类型的查询。