0

私はいくつかのデータを設定しようとしていますが、暗号クエリにはかなり慣れていません。私は、サッカー チームの一員としてノードと関係を作成するプロジェクトを行っています。

たとえば、現時点ではゲームとレフリーのみでノードを作成しています。私の論理は、ゲームのデータを読み込み、審判がノードとして存在しない場合は、審判を作成することです。将来の試合で、すでに存在する審判を見た場合、重複した記録を作成するのではなく、それらを試合に関連付けるだけです. 私は次のことを行っており、データを入力しようとする前に、ロジックが理にかなっているかどうかを確認したいと考えていました。

//JUST CREATED A GAME NODE called $GameNode



 //let's search if the referee exists 

            $queryString = "START n=node({nodeId}) ".
                            "MATCH (n)<-[:REFEREED]-(x)".
                            "WHERE x.name = {name}".
                            "RETURN x";
            $query = new Everyman\Neo4j\Cypher\Query($client, $queryString, array('nodeId' => 0, 'name' => $referee['referee_name']));
            $result = $query->getResultSet();

            $referee = 0;

            if (count($result)==0)
            {

               //create referee as he/she does not exist
           $referee= $client->makeNode();
           $referee->setProperty('name', $referee['referee_name'])

                    ->save();  
            }

           else
           {
               //let's point the referee to this law case also

               $referee = $client->getNode($result['x']->getProperty('id'));

           }


            $referee->relateTo($GameNode, 'REFEREED')
                     ->save();

よろしくお願いします

4

1 に答える 1

1

これは機能するはずですが、多くのラウンドトリップを行います。

Cypher は、次のタスクにのみ使用できます。

Neo4j 1.9 の使用CREATE UNIQUE

START root=node({nodeId}) 
CREATE UNIQUE (root)<-[:REFEREED]-(referee {name: {name}})
RETURN referee

Neo4j 2.0では、使用できますMERGE

MERGE (referee:Referee {name: {name}})
RETURN referee

また、識別子にはより適切な名前を使用してください。

于 2013-07-06T07:45:28.260 に答える