1

私のプロジェクトがFacebookであると仮定します。ステータスの更新と友達のステータスの更新の両方で構成されるフィードを表示したい。

これが関係です。

  • ユーザーKNOWSユーザー
  • ユーザーUPDATES_STATUSステータス

これは、友達のステータスの更新を取得する方法です。

START me = node(1) MATCH me-[:KNOWS]-()-[:UPDATES_STATUS]->friendsStatusUpdates RETURN friendsStatusUpdates

そして、これは私が自分のステータスアップデートを取得する方法です。

START me = node(1) MATCH me-[:UPDATES_STATUS]->myStatusUpdates RETURN myStatusUpdates

どちらのクエリも正常に機能しますが、これら2つを組み合わせた単一のクエリが必要です。

4

3 に答える 3

2

Google グループから得た回答は次のとおりです。

START me = node(1) MATCH me-[:KNOWS*0..1]-()-[:UPDATES_STATUS]->statusUpdate RETURN DISTINCT statusUpdate

*0..1私がしなければならなかったことは、0 または 1 レベルの両方の深さの結果を得るために、関係に深さインジケータを追加することだけでした。

編集:それがDISTINCTないと、クエリに 0 レベルのノードが 2 回含まれるため、追加する必要がありました。その結果、重複が発生します。


WITHステートメントを使用して同じ結果を返す代替クエリ。

START me = node(1) 
MATCH me-[:KNOWS*0..1]-friend
WITH DISTINCT friend
MATCH friend-[:UPDATES_STATUS]->statusUpdate 
RETURN DISTINCT statusUpdate
于 2013-01-22T14:53:10.647 に答える
0

クエリが START me = node(1) MATCH me-[:KNOWS|HIMSELF]-()-[:UPDATES_STATUS]->friendsStatusUpdates RETURN friendsStatusUpdates であるよりも、ユーザー ノードとそれ自体の間の自分自身の関係をクレートします。

于 2013-01-22T14:18:14.250 に答える
0

http://docs.neo4j.org/chunked/milestone/introduction-pattern.html

START me = node(1) 
MATCH me-[:UPDATES_STATUS*1..2|KNOWS]-myStatusUpdates 
RETURN myStatusUpdates

コマンドで*1..2動作しない場合は、次のようにします。|

START me = node(1) 
MATCH friendsStatusUpdates2-[?:UPDATES_STATUS]-me-[:KNOWS]-()-[:UPDATES_STATUS]->friendsStatusUpdates 
RETURN distinct myStatusUpdates,friendsStatusUpdates2

RETURNいくつかの集計関数を使用してステートメントを編集するだけで、行ごとに 1 つのステータスを取得できます

于 2013-01-22T14:26:09.447 に答える