私のデータ構造はとてもシンプルです。 1つのラベルは、顧客と呼ばれ、別の顧客と1対1の一方向の関係で参照されます。参照されたすべての度合いのノードの数から各ノードのカウントを取得する正しいクエリは、そのノードの結果である。すべての第1世代ノードの数を取得するneo4j
Customer 1st gen referrals 2nd gen referrals
A 1 1
B 1 0
C 0 0
私のデータ構造はとてもシンプルです。 1つのラベルは、顧客と呼ばれ、別の顧客と1対1の一方向の関係で参照されます。参照されたすべての度合いのノードの数から各ノードのカウントを取得する正しいクエリは、そのノードの結果である。すべての第1世代ノードの数を取得するneo4j
Customer 1st gen referrals 2nd gen referrals
A 1 1
B 1 0
C 0 0
あなたがノードに一致し、所望のパターンの大きさを見つけることができる:
MATCH (c:Customer)
RETURN c as Customer,
size((c)-[:REFERRED]->()) as firstGenRef,
size((c)-[:REFERRED*2]->()) as secondGenRef
データベース から成っ言い換えれば は、CustomerAはをCustomerBが結果のテーブルがあるべきCustomerC 呼ばをCustomerB、 をいいます
EDIT
すべてのレベルのリフェラルのカウントを返す限り、これは高価なクエリになる可能性がありますあなたのデータがどのように相互接続されているか。
あなたはこれを試してみることができ、それが長すぎるか、ハングを取る場合、あなたは通常、良好に動作することを、唯一遭遇した各ノードに単一のパスを保持するNODE_GLOBALの一意性を利用しており、特にapoc.path.spanningTree()
、APOC Proceduresに切り替えたいこと。
MATCH (c:Customer)-[r:REFERRED*]->(ref)
WITH DISTINCT c, size(r) as gen, ref
WITH c, gen, count(gen) as referrals
ORDER BY gen ASC
RETURN c as Customer, collect({gen:gen, referrals:referrals}) as referrals
これがダウンし、顧客ごとの最大世代の深さまで、各世代での紹介の世代と多数の収集マップと一緒に、あなたの行の各顧客を取得します。
大変感謝!最後の洗練。どのようにしてn世代までのノードを、どのノードの中でも最も高い度合いで知らせることができますか? – user1175817
高価なクエリかもしれませんが、これに使用できるクエリを追加しました。 – InverseFalcon
http://docs.neo4j.org/chunked/stable/query-functions-scalar.html#functions-length これが役に立ちます – binariedMe