在Neo4j中,对于每个不相交的子图,返回关系最多的节点
我是Neo4j和图论的新手,我想知道我是否可以用Neo4j来解决我遇到的问题。如果我用错误的词来描述东西,请纠正我。因为我对这门学科还不熟悉,所以我还没有真正了解什么叫一切 我认为描述我的问题最简单的方法就是用大量的图片。 假设有两个不相交的子图,看起来像这样 从上面的子图中,我想得到满足两个条件之一的子图列表 标准1. 如果一个节点与另一个节点具有唯一的关系,则该节点和关系应作为子图返回 标准2. 如果关系不是唯一的,我希望返回具有最多关系的节点,作为具有其关系和相关节点的子图 如果其他节点符合条件2,我希望返回所有子图 或者放在这个图表的上下文中 给我那些有独特游戏的人,如果有其他人有相同的游戏,给我那些游戏最多的人。如果他们打成平局,则返回所有打成平局的人。 或者实际上,返回整个子图,而不仅仅是人 为了澄清我的想法,这里有一张图片描述了我想要得到的结果。结果的顺序并不重要 不相交子图A,因为条件1,安德鲁是唯一有气泡的人 不相交的子图B,因为条件1,Johan是唯一一个有谜题Bobble 1的人 不相交子图C,因为条件2,朱莉娅因为她有最多的游戏 不相交的子图D,因为标准2,Anna因为她与Julia的游戏次数最多 值得一提的是,约翰与《Bobble 2》的关系并没有回归,因为这并不是唯一的,他也没有玩过最多的游戏 这是一个你只用Neo4j就能解决的问题吗?这是个好主意吗 如果你能解决这个问题,你会如何在Cypher中解决 创建脚本:在Neo4j中,对于每个不相交的子图,返回关系最多的节点,neo4j,cypher,graph-theory,Neo4j,Cypher,Graph Theory,我是Neo4j和图论的新手,我想知道我是否可以用Neo4j来解决我遇到的问题。如果我用错误的词来描述东西,请纠正我。因为我对这门学科还不熟悉,所以我还没有真正了解什么叫一切 我认为描述我的问题最简单的方法就是用大量的图片。 假设有两个不相交的子图,看起来像这样 从上面的子图中,我想得到满足两个条件之一的子图列表 标准1. 如果一个节点与另一个节点具有唯一的关系,则该节点和关系应作为子图返回 标准2. 如果关系不是唯一的,我希望返回具有最多关系的节点,作为具有其关系和相关节点的子图 如果其他节点
CREATE (p1:Person {name:"Johan"}),
(p2:Person {name:"Julia"}),
(p3:Person {name:"Anna"}),
(p4:Person {name:"Andrew"}),
(v1:Videogame {name:"Puzzle Bobble 1"}),
(v2:Videogame {name:"Puzzle Bobble 2"}),
(v3:Videogame {name:"Puzzle Bobble 3"}),
(v4:Videogame {name:"Puzzle Bobble 4"}),
(v5:Videogame {name:"Bubble Bobble"}),
(p1)-[:HAS]->(v1),
(p1)-[:HAS]->(v2),
(p2)-[:HAS]->(v2),
(p2)-[:HAS]->(v3),
(p2)-[:HAS]->(v4),
(p3)-[:HAS]->(v2),
(p3)-[:HAS]->(v3),
(p3)-[:HAS]->(v4),
(p4)-[:HAS]->(v5)
我觉得这个解决方案可能不是您想要的,但它可能是一个良好的开端:
MATCH (game:Videogame)<-[:HAS]-(owner:Person)
OPTIONAL MATCH owner-[:HAS]->(other_game:Videogame)
WITH game, owner, count(other_game) AS other_game_count
ORDER BY other_game_count DESC
RETURN game, collect(owner)[0]
比赛(游戏:电子游戏)(其他游戏:电子游戏)
使用游戏、所有者、计数(其他游戏)作为其他游戏计数
由其他方订购\u游戏\u计数说明
返回游戏,收集(所有者)[0]
以下是查询:
- 查找所有游戏及其所有者(不匹配没有所有者的游戏)
可选游戏是否与所有者可能拥有的任何其他游戏进行了匹配(通过进行可选游戏,我们可以说,如果他们拥有零,那么就可以了)
- 通过每个游戏/所有者对以及该所有者拥有的其他游戏数量的计数,进行排序,以便拥有最多游戏的玩家排在第一位
每个游戏的第一个所有者(执行RETURN
收集时,
顺序将被保留)