2013-07-05 1 views
0

일부 데이터를 설정하려고하고 있으며 사이퍼 쿼리에 새로운 것이 있습니다. 저는 노드와 관계가 축구 팀의 일원으로 만들어지는 프로젝트를하고 있습니다.neo4j에서 노드를 속성 이름으로 검색하는 방법은 무엇입니까?

예를 들어 게임과 심판에 노드를 만드는 중입니다. 내 논리는 내가 게임에 대한 데이터를 읽고 심판이 노드로 존재하지 않는다면, 그를 만들자는 것입니다. 장래의 게임에서 이미 존재하는 심판을 볼 수 있다면, 나는 그 기록을 복제 기록으로 만드는 것보다는 게임과 관련 지을 수 있습니다. 나는 다음과 같은 일을하고 있으며 나의 논리가 내 데이터를 채우기 전에 의미가 있는지를 알고 싶었다. 사전

+0

대답은 다음과 같습니다. http://stackoverflow.com/questions/29059575/neo4j-php-retrieve-node – edoceo

답변

1

에서

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

많은 감사이 작동하지만 왕복을 많이 수행해야한다.

에만이 작업 사이퍼를 사용할 수 있습니다

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 

은 또한 당신의 식별자에 대한 더 나은 이름을 사용하십시오 사용할 수 있습니다 .

+0

도움을 주셔서 감사합니다. 이게 효과가 있니? (referee) - [: REFEREED] -> (게임) " "RETURN referee – jini

+0

ahh nevermind가 방금 얻었습니다. – jini

+0

실제로하지 않았다. 나는 다음을 시도했다 : START game = node ({nodeId}) CREATE UNIQUE (심판 {label : {name}}) - [: REFEREED {label : 'REFEREED'}] -> (game) RETURN referee; 그리고 같은 심판을 위해 여러 개의 노드를 만들었습니다. 나는 단지 심판이 이미 존재한다면 게임에 자동으로 연결되기를 원합니다. 어떤 팁? 한편 문서를 읽으려고 시도 할 것입니다 – jini