2017-07-04 3 views
1

いくつかのプロパティを持つタイプxのノードがあります。 私は、与えられたプロパティのセットがxに存在するかどうかをチェックするクエリーを作成しようとしています。そうした場合は、それぞれを値と比較し、関連ノードを返します。複数のプロパティの値がNeo4jに存在するかどうかを調べる

MATCH (x) WHERE exists(x.a) and ('high' IN (x.a)) and exists(x.b) and ('high' IN (x.b)) RETURN x 

と: - - :私が試してみました

match(x) 
if exist(x.a, x.b) 
    then if(x.a==1 and x.b==2) 
     return x 
else if exist(x.a) 
    then if(x.a==1) 
     return x 
else if exist(x.b) 
    then if(x.b==1) 
     return x 

- :

match(x) where x.a='high' and x.b='high' return x 

をしかし、これらのクエリの両方の問題は、もしということである擬似コードは、このようなものになるだろう'a'はxのプロパティではなく、 'b'は、少なくとも 'b'の値に基づいて結果を与えることなくnullを返します。私はそれがとの句のためだと仮定していますが、私は代替を見つけることができません。私はのNeo4j 3.1.3

+0

UNIONを使用して3つの異なるケースをリンクすることもできます。 –

答えて

1

は: -

match(x) where x.a='high' return x union match(x) where x.b='high' return x 

は、上記Tomの答えからアイデアを得ました!

0

を使用しています これはうまくいくかもしれない:

CREATE (:X {a: "first a"}) 
CREATE (:X {a: "second a", b: "first b"}) 
CREATE (:X {b: "second b"}) 

MATCH (x:X) 
WHERE exists(x.a) 
AND exists (x.b) 
AND <any other conditions> 
RETURN x 
UNION 
MATCH (x:X) 
WHERE exists(x.a) 
AND NOT exists (x.b) 
AND <any other conditions> 
RETURN x 
UNION 
MATCH (x:X) 
WHERE NOT exists(x.a) 
AND exists (x.b) 
AND <any other conditions> 
RETURN x; 

3例は、あなたがそれらを一緒に3例を指定し、UNIONできるのと同じものを返しますので。 UNION演算子は、このようなクエリのものを作る、この場合には出て役立つこのことができます

希望、 トム

+0

だから、UNIONは確かにそれについて行く方法と思われる。ユニオンを使用しているときにチェックする必要がないことを編集するだけです。 だから、クエリは、このようなものになります: - X おかげで一致(x)の X.A = '高' リターンX 組合 試合(x)の x.b = '高' リターン! – pHM

関連する問題