Neo4j:Predicat ALL。检查密钥是否大于字符串

时间:2016-10-13 09:04:40

标签: neo4j

我正在使用Neo4j 3.0.6,当我的关系密钥大于'2015-02'时,我想返回值。以下是我在Cypher的询问:

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

但是这个重新测试我的测试结果(true或false)和值:null。因此,它不会过滤我的键并返回其值

1 个答案:

答案 0 :(得分:1)

引号用于分隔字符串(即数据的字符部分,而不是查询语言本身),因此r['k']表示r 的属性值< / strong> k

您想要的是r[k],这意味着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()函数的上下文中。更正确的查询是:

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

现在几乎是第二个查询。