2

特定のプロパティを持つノードに関連しないノードを除外しようとしている状況があります。たとえば、すべての人を取得するクエリがあるとしますが、茶色の毛皮の犬を飼っている人だけに絞り込みたいとします。私がやりたいことは次のようなものです:

//For simplicity's sake, assume nodes 1,2,3 are the potentials I care about
START person=node(1,2,3)  
WHERE person-[:has]->(dog{furColor:"Brown"})  // <-- would be nice to use
RETURN person

ただし、これは機能しません。パーサーは明示的に教えてくれます:

パターン要素のプロパティは、MATCH では許可されていません。

(「WHERE」を使用しているときに「MATCH」を参照するのは面白いですが、何でも)。したがって、この方法でノードのプロパティを参照することはできません。他にどのようなオプションがありますか? MATCH 句を追加することで、必要なものをエミュレートできました...

START person=node(1,2,3) 
MATCH person-[:has]->dog
WHERE dog.furColor! = "Brown"
RETURN person

...しかし、追加のパスを一致させてから、それらを再度フィルタリングする必要があるのは奇妙で非効率的です。別の方法はありますか?

4

2 に答える 2

0

あなたはこれを試すことができますが、賢明な試合のパフォーマンスに対してそれを測定してください.

where のパス式はパスのコレクションを返します。コレクション関数extractとコレクション述語allを使用すると、そのパスのコレクションを操作できます。

START person=node(1,2,3)  
WHERE ALL(dog in extract( path in person-[:has]->() : last(path) // last node of path
           WHERE dog.furColor! = "Brown"
         )
RETURN person
于 2013-02-20T07:33:12.030 に答える