2016-10-13 11 views
0

私はNeo4j 3.0.6を使用しています。私の関係のキーが '2015-02'より大きい場合は値を返したいと思います。 Cypherでの質問は次のとおりです。Neo4j:Predicat ALL。キーが文字列より大きいかどうか確認してください

MATCH (p:Person)-[r]->() 
WHERE ALL(key in keys(r) WHERE key>'2015-02') 
RETURN r['key'] 

何かが返されます。

MATCH (p:Person)-[r]->() 
Unwind keys(r) as k 
with '2015-02'<k as m,k 
RETURN r['k'],m 

しかし、この1つは(真または偽)私のテストの値として結果retruns:ヌルの問題そうでない場合

がどこにあるか私にはわかりません。したがって、キーをフィルタリングせずに値を返すことはありません。

+0

キーまたはキー値が文字列よりも大きいですか? –

答えて

1

引用符は、文字列(クエリ言語自体ではなくデータの文字部分)を区切るために使用されます。したがって、r['k']は、 rkと命名された。何をしたい

名前がk変数であるrのプロパティの値を意味し、r[k]です。

あなたのクエリが

MATCH (p:Person)-[r]->() 
WHERE ALL(key in keys(r) WHERE key>'2015-02') 
RETURN r[key] // No quotes 

MATCH (p:Person)-[r]->() 
UNWIND keys(r) as k 
WITH '2015-02' < k as m, k 
RETURN r[k], m // No quotes either 

を更新する必要がありますkeyのみのコンテキストに存在する最初のクエリでは、コメントで指摘したように

all()楽しいction。より正確なクエリは次のようになります。

MATCH (p:Person)-[r]->() 
UNWIND keys(r) AS key 
WITH r, key 
WHERE key > '2015-02' 
RETURN r[key] 

これはもう2番目のクエリです。

+0

ありがとうございます。さて、私は違いを見たが、最初のものを実行するとき。変数 'key'が定義されていません。プレディケートALLでのみ定義されていますか?ありがとうございます – MAYA

+0

はい、私の悪い、 'キー'は 'all()'の文脈にのみ存在します。 –

+0

あなたの投稿を更新していただきありがとうございますが、私はそれが 'Where'ではなく 'With'という句であると思います。 – MAYA

関連する問題