2016-12-16 5 views
1

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) 

答えて

0

あなたはunwindの代わりforeachを使用することができます。

Match (b:Brand) WITH collect (distinct b) as bb 
UNWIND bb[0..3] as b 
    MATCH (b)-[]->(p:Post)<-[]-(per:Person) 
RETURN b, p, per LIMIT 40 

それともwithlimitを兼ね備え:

MATCH (b:Brand) WITH distinct b LIMIT 3 
MATCH (b)-[]->(p:Post)<-[]-(per:Person) 
RETURN b, p, per LIMIT 40 
関連する問題