2015-01-15 93 views
0

我使用Neo4jPHP編寫了一個片段,它將給我一個與「主」節點(A)連接的所有節點的數組。節點連接是這樣的:使用neo4jphp獲得與主節點相關的所有節點的數組

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

這是我使用neo4jPHP寫的代碼:

$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 

的問題是,$ resultArray店這涉及到主節點反覆(如節點這裏解釋: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'替換'z.id') - 但它們不會是簡單的字符串。 – cybersam

+0

好的。大。我將在明天嘗試第一個想法:MATCH(n {gid:'58731'}) - [:contains * 1 ..] - >(z)RETURN ID(z)作爲名稱 – user1919

相關問題