2017-06-05 7 views
0

私は、次のいずれかneo4jのパス上のリレーションシップの合計を返しますか?

MATCH path=((house:Building {country: 'usa'})-[*]-(shelf:Building {country: 'mexico'})) 
RETURN path; 

のような関数の戻りリストから関係が貴様の名前を持つことができますが、propertysは同じキーを持つ、関係のプロパティの合計を取得する必要があります(とたとえば、次のようになります。

MERGE (house)-[:NAME1{num: '5'}]->(cabin) 
MERGE (cabin)-[:NAME2{num: '10'}]->(shop) 
MERGE (shop)-[:NAME1{num: '5'}]->(foo) 
MERGE (foo)-[:NAME3{num: '30'}]->(shelf) 

前の要件を適用して、すべての関係のプロパティの合計を返すクエリが必要です。

どうすればいいですか?

答えて

1

あなたは合計を計算するためにREDUCE functionを使用することができます。

MATCH path=((house:Building {country: 'usa'})-[rels*]-(shelf:Building {country: 'mexico'})) 
RETURN path, REDUCE(s = 0, r IN rels | s + TOINT(r.num)) AS total; 

は注:あなたが支払う必要がないように、理想的には、あなたは、(文字列の代わりに)numプロパティの整数値を格納する必要があります数値を使用する必要があるたびに、すべての文字列値を整数に変換するためのパフォーマンス上のペナルティが発生します。その後、TOINT関数の呼び出しを削除することができます。

関連する問題