0120-919-0310(Brand) - [:from] - >(Post)< - [:likes] - (Person)などのNeo4jグラフがあるとします。Cypher返されるクエリx特定のノードタイプの番号
ブランドポストの数が最小となるサイファークエリを返すにはどうすればいいですか(3)。これはスケーラブルで特定のプロパティ属性値に依存しないようにしたいと考えています。
したがって、結果は、ブランドノードのインスタンスが少なくとも3つ、ポストから5つ、Personから15つのインスタンスが返されます。
1)それは、本質的に
と同じように返すので、これは動作しませんでしたMatch (b:Brand)-[]->(p:Post)<-[]-(per:Person)
Match (b1:Brand)-[]->(p1:Post)<-[]-(per2:Person)
Match (b2:Brand)-[]->(p2:Post)<-[]-(per3:Person)
return b,b1,b2,p,p1,p2,per,per2,per3
limit 30
スケーラブル各ブランド(ない)のために、いくつかの変数名を宣言します。
は、私はいくつかの異なるものを試してみました
Match (b:Brand)-[]->(p:Post)<-[]-(per:Person)
return b,p,per
limit 30
2)のforeachを使用して、いくつかの
Match (b:Brand) WITH collect (distinct b) as bb
FOREACH (b in bb[0..3] | MATCH (b)-[]->(p:Post)<-[]-(per:Person))
RETURN b, p, per LIMIT 40
ForeachコールでMatchを使用できないため、これは機能しませんでした。
私がこれを行う方法を知っている唯一の方法は、スケーラブルではない独自のプロパティブランド名の値でwhere句を宣言することです。
しかし、上記はまだ私が望むものを返すことさえありません。
助けてください。ここでテストするための簡単なグラフである:
Create (b1:Brand {brand:'b1'})
Create (b2:Brand {brand:'b2'})
Create (b3:Brand {brand:'b3'})
Create (p1:Post {id: "001",message: "foo"})
Create (p2:Post {id: "002",message: "bar"})
Create (p3:Post {id: "003",message: "baz"})
Create (p4:Post {id: "004",message: "raz"})
Create (per1:Person {id: "001",name: "foo"})
Create (per2:Person {id: "002",name: "foo"})
Create (per3:Person {id: "003",name: "foo"})
Create (per4:Person {id: "004",name: "foo"})
Create (per5:Person {id: "005",name: "foo"})
Create (per6:Person {id: "006",name: "foo"})
Create (per7:Person {id: "007",name: "foo"})
Merge (b1)-[:FROM]->(p1)
Merge (b1)-[:FROM]->(p2)
Merge (b2)-[:FROM]->(p3)
Merge (b3)-[:FROM]->(p4)
Merge (per1)-[:LIKES]->(p1)
Merge (per1)-[:LIKES]->(p2)
Merge (per1)-[:LIKES]->(p3)
Merge (per2)-[:LIKES]->(p1)
Merge (per2)-[:LIKES]->(p4)
Merge (per3)-[:LIKES]->(p3)
Merge (per4)-[:LIKES]->(p1)
Merge (per5)-[:LIKES]->(p2)
Merge (per6)-[:LIKES]->(p1)
Merge (per6)-[:LIKES]->(p2)
Merge (per6)-[:LIKES]->(p3)
Merge (per6)-[:LIKES]->(p4)
Merge (per7)-[:LIKES]->(p4)