1

我正在从文本文件中读取足球比赛数据,并希望创建比赛和裁判节点。我希望逻辑工作的方式是创建一个匹配节点,然后我获取裁判名称并仅在裁判不存在时创建裁判节点,否则我只需将现有裁判链接到比赛。我目前没有根节点,并且不确定是否应该创建一个(对于图形建模来说非常新)。

我有以下查询,我认为我很接近但不在那里。

$match= $client->makeNode();
$match->setProperty('label', "match: ".$feed['match_number'])
      ->setProperty('type', "match")->save();

//现在已经创建了匹配节点,让我们看看 feed 中的当前裁判是否已经存在

$queryString = "START match=node({nodeId}) ".   <----- NEED TO LOOK AT ALL CASES?????
"CREATE UNIQUE (referee{label:{name}, type:'referee'})-[:REFEREED{ label:'REFEREED' }]->(match)"."RETURN referee";

$query = new Neo4j\Cypher\Query($client, $queryString, array('nodeId' => $match->getId(),'name' => $feed['referee_name']));
$result = $query->getResultSet();

有人可以帮忙吗?

4

1 回答 1

1

目前似乎满足您发布的查询的可能模型之一:

(Team)-[:PLAYS]->(Match)

(Match)-[:HAS_REFEREE]->(Referee)

(Match)-[:PLAYED_IN]->(City)

PLAYS 关系可以有一个属性来指示球队是否是主队。您还可以在 PLAYS 关系上使用一个属性来指示该团队是否获胜。或者,如果获胜是您正在寻找的重要部分,您可以创建一个额外的关系,例如(Team)-[:WON]->(Match)(尽管您需要考虑如何模拟平局。两支球队中的任何一支球队都没有 WON 关系比赛可能表示平局)。

  1. 特定裁判的所有比赛:从裁判开始,穿过比赛到城市。您可以索引裁判的一些独特属性,以便能够快速查找他

  2. 裁判工作且主队获胜的所有比赛:从裁判开始,查找他的所有比赛,过滤 WON 关系/属性和主队属性

  3. 主队胜场数最高的所有裁判:同上,从所有裁判开始

  4. 一个城市最活跃的裁判:从城市开始,找到所有比赛及其裁判

您可能会根据您想要回答的更多问题(尤其是主队属性、赢/输关系或属性等)稍微调整一下。

而且我认为您根本不需要根节点。如果您想找到所有比赛/城市/裁判等,您可以编制索引

于 2013-09-05T15:36:12.347 回答