4

シンプルなソーシャル ネットワーク グラフ db モデルがあります。ユーザーは他のユーザーをフォローして投稿できます。ユーザーが投稿したすべての投稿のリストと、ユーザーがフォローしているすべての投稿のリストを取得しようとしています

START a=node:node_auto_index(UserIdentifier = "USER0") 
MATCH (a)-[:POSTED]->(b), (a)-[:FOLLOWS]->(c)-[:POSTED]->(d) 
RETURN b, d;

これは、b のすべての値と d のすべての値を結合したタプルである、2 つのクロス積を返します。(bxd) 投稿の単純なリストだけを希望します。どうすればいいですか?2 つの別々のクエリを実行する必要がありますか?

4

2 に答える 2

1

あなたが今それを行うことができる別の方法(そしてIMHOはよりクリーンな方法)は、可変長の関係を利用することです。

START user=node...
MATCH (user) -[:FOLLOWS*0..1]-> (following) -[:POSTED]-> (post)
RETURN post

この方法の利点は、自分のクエリと友人/フォロワーのクエリの両方を均一に集約できることです。例: 並べ替え、制限、ページ付けなど。

于 2014-06-17T02:23:35.720 に答える
1

https://groups.google.com/forum/?fromgroups=#!topic/neo4j/SdM7bKNRDEAで回答:

START a=node:node_auto_index(UserIdentifier = "USER0") 
MATCH (a)-[:POSTED]->(b)
WITH a, collect(b) as posts
MATCH (a)-[:FOLLOWS]->(c)-[:POSTED]->(d) 
RETURN posts, collect(d) as followersPosts;
于 2012-11-01T16:30:47.823 に答える