2015-01-15 1 views
0

Neo4jPHP를 사용하여 "마스터"노드 (A)에 연결된 모든 노드의 배열을 제공하는 스 니펫을 작성합니다. 노드는 다음과 같이 연결합니다neo4jphp를 사용하여 마스터 노드와 관련된 모든 노드로 배열을 가져옵니다.

A -> B 
    B -> C 
    C -> D 
    C -> E 
    B -> F 

이 내가 neo4jPHP를 사용하여 작성한 코드는 다음과 같습니다

문제는 $ resultArray 매장처럼 (반복 마스터 노드와 관련된 노드가 여기에 설명되어

$client = new Everyman\Neo4j\Client(); 
$querystring="MATCH path=(n {gid:'58731'})-[:contains*]-(z) RETURN ([x in nodes(path) | x.id]) as names"; 
$query=new Everyman\Neo4j\Cypher\Query($client,$querystring); 
$result=$query->getResultSet(); 

foreach($result as $resultItem){ 
    $resultArray[] = $resultItem['n']; 
} 
print_r($resultArray); // prints the array 
: Strange behavior in neo4j when I try to get all the nodes which relate with a master node)

내 질문은 : 한 번만 "마스터"노드와 관련된 모든 노드를 포함하는 배열을 다시 얻으려면 neo4jPhp를 사용하는 방법이 있습니까? 이 같은 뭔가 :

$distinctNodes = [B,C,D,E,F] 

감사 D.

답변

1

이 쿼리는 직접 배열을 반환해야합니다 대답에 대한

MATCH (n {gid:'58731'})-[:contains*1..]->(z) RETURN COLLECT(DISTINCT z.id) as names 
+0

감사합니다! 내가 가진 한가지 문제점은 id가 다른 노드의 다른 id와 동일 할 수 있다는 것입니다. DISTINCT를 사용하면이 경우 문제가 발생합니다. 맞습니까? – user1919

+0

예. 이 경우 'id'대신에 고유 한 속성을 사용해야합니다. 유일한 것으로 보장되는 것이 없다면 내부 ID를 사용할 수 있습니다 (ID (z)를 통해). 노드의 내부 ID는 고유하지만 노드가 삭제되면 내부 ID를 새 노드에 다시 할당 할 수 있습니다. 또는 노드 자체 일 수도 있습니다 (즉,'z.id'를'z'로 대체하십시오). 그러나 그들은 단순한 문자열이 아닙니다. – cybersam

+0

확인. 큰. MATCH (n (gid : '58731')) - [: contains * 1 ..] -> (z) RETURN ID (z) 이름으로 – user1919