【问题标题】:Struggling with Cypher & CREATE UNIQUE与 Cypher 作斗争并创建 UNIQUE
【发布时间】:2013-07-06 20:19:06
【问题描述】:

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

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

$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();

有人可以帮忙吗?

【问题讨论】:

    标签: php graph neo4j


    【解决方案1】:

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

    (Team)-[:PLAYS]->(Match)
    
    (Match)-[:HAS_REFEREE]->(Referee)
    
    (Match)-[:PLAYED_IN]->(City)
    

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

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

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

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

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

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

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

    【讨论】:

    • 非常感谢。这有助于我建模。我很快就会在这里发回代码。
    猜你喜欢
    • 2017-11-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2013-12-06
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多