我正在使用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。因此,它不会过滤我的键并返回其值
答案 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]
现在几乎是第二个查询。