如何在节点对另一个节点(关系)执行操作时以及在事件中进行建模?什么是最好的解决方案?
例如:PLayerA- [PASSED] - > PlayerB- [IN] - > GameA
除非GameA是您唯一获得的游戏,否则您无法查询。 对我来说有意义的是让IN关系从PASSED关系开始。像这样:
我很大一部分时间告诉我,我不知道这个原因我还不了解图形建模。您如何以最佳方式对此进行建模?
答案 0 :(得分:2)
我认为正确的建模方法是将Passed关系提取到节点中 - 创建HyperEdge。新的传递节点现在将与源和目标玩家以及传球发生的游戏有关系。 Mark Needham在DZone上有一个与足球相关的例子。
您的查询最终会更像:
MATCH (p:Player{name:'Player A'})-[:PASSED]->(po:PassObject)-[:RECEIVED]->(r:Player{name:'Player B'})
RETURN COUNT(po)
对于两位球员之间的所有传球,或者:
MATCH (p:Player{name:'Player A'})-[:PASSED]->(po:PassObject)-[:RECEIVED]->(r:Player{name:'Player B'})
MATCH (po)-[:IN_GAME]->(g:Game)
WHERE g.fixture = "WhateverYouUseToIdentifyYourGames"
RETURN COUNT(po)
单场比赛中的传球。