6

お互いに STATUS="on" プロパティと関係があるノード間のすべての最長パスを見つける暗号クエリを書きたいと思います。これは私がこれまでに行ったことです:

start n=node(*) 
match p = n-[r:INCLUDE*..]->m 

with n,MAX(length(p)) as l 
match p = n-[r:INCLUDE*..]->m 
WHERE all(rel in r 
 where rel.status='on' AND (length(p) = l) )
return p,l 

最長のパスだけでなく、長さが 1、2、3 の 3 つのパスが返されます。クエリは最長のパスのみを見つける必要がありますwhere rel.status='on'。 2,3,3,4,6,6,6 、長さ 6 の 3 つのパスのみを返す必要があります。

どうすればいいですか?

私を案内してください、私はneo4jを初めて使用し、多くのことを試しましたが、めまい以外には何もありません.あなたの助けにとても感謝しています.

4

1 に答える 1

12

関係プロパティの基準を最初のパス一致まで上げてみてください。そうしないと、その基準でフィルタリングされていないパスの最大長を計算することになります。次に、パスと最大長をクエリの 2 番目のレグに移動して、すべてのパスを再度一致させる必要がないようにします。パスを収集してWITH句でそれらを実行し、戻ったときにパスの長さでフィルター処理できます。次のようなものを試してください

START n=node(*)
MATCH p=n-[rels:INCLUDE*]->m 
WHERE ALL (rel IN rels 
  WHERE rel.status='on') 
WITH COLLECT(p) AS paths, MAX(length(p)) AS maxLength 
RETURN FILTER(path IN paths 
  WHERE length(path)= maxLength) AS longestPaths
于 2013-11-04T10:35:33.067 に答える