John が Met に商品を販売し、Met が Bob と Alen の両方に商品を販売しており、Alen が再び John に商品を販売しているとします。私が必要としているのは、この例の John..Met..Alen のようなすべての閉じた円を返す Cypher クエリです。これは、Alen が再び John に商品を販売し、関係プロパティ (金額) の最低額も表示する閉じた円になっているためです。私はデータベース全体からこれを行い、すべての閉じた円と最小量を取得します。ありがとう!
質問する
1171 次
2 に答える
4
ステファンの答えから始めて、最低限、パスの長さを考慮に入れたいと思うでしょう。
start n=node(*)
match p=n-[:SELLS_TO*1..5]->n
return p, lenght(p)
ノードあたりのパスの長さを最短にする
start n=node(*)
match p=n-[:SELLS_TO*1..5]->n
return n, min(lenght(p))
最短経路を取得したい場合:
start n=node(*)
match p=n-[:SELLS_TO*1..5]->n
with n, collect(nodes(p)) as nodes, min(length(nodes(p))) as l
return n, head(filter(p in nodes : length(p) = l)) as shortest_circle,l
例については、Neo4j コンソールを参照してください: http://console.neo4j.org/r/wrm522
グラフ全体をスキャンすると、円の各ノードに対して同じ円が複数回得られることに注意してください。
これは、nodes、length、collect、head、filter 関数、および min 集計を使用します。参照: http://docs.neo4j.org/chunked/milestone/query-function.html
ステファンがすでに言ったように、すべてのノードをスキャンすることはおそらく非常に高価です。
于 2013-03-31T01:26:00.697 に答える