Neo4j Cypher: 在WHERE子句中查找节点属性数组的精确匹配

5

如果给定一个具有数组属性的Neo4J节点,我该如何创建一个Cypher查询来仅返回与数组字面值匹配的节点?

使用控制台,我创建了一个带有名为“list”的数组属性的节点:

neo4j-sh (0)$ create n = {list: [1,2,3]};
==> +-------------------+
==> | No data returned. |
==> +-------------------+
==> Nodes created: 1
==> Properties set: 1
==> 83 ms

neo4j-sh (0)$ start n=node(1) return n;
==> +-----------------------+
==> | n                     |
==> +-----------------------+
==> | Node[1]{list:[1,2,3]} |
==> +-----------------------+
==> 1 row
==> 1 ms

然而,我的查询语句并没有返回刚刚创建的 Node,因为 WHERE 子句匹配的是一个数组字面量:

neo4j-sh (0)$ start n=node(1) where n.list=[1,2,3] return n;
==> +---+
==> | n |
==> +---+
==> +---+
==> 0 row
==> 0 ms

我可能没有正确使用Cypher。有关在Cypher中进行准确的数组属性匹配的任何提示都将非常有用。

2个回答

6
控制台始终运行最新的Neoj4快照版本。版本指的是Cypher语法解析器,我们将更清楚地指出这一点 :)
现在,在Cypher中进行了一些关于数组处理的修复,请参见https://github.com/neo4j/community/pull/815https://github.com/neo4j/community/issues/818,这可能是使控制台工作的原因。这已经在1.8.M07之后合并了,因此为了在本地使其工作,请下载最新的1.8.-SNAPSHOT之一,从GITHUB构建它或等待即将到来的1.8.M08。
/peter

3
您使用的是哪个版本的Neo4j?
在1.8 M07版本中,您提供的代码可以正常运行。
这是一个样例链接
更新: 我在本地安装的Web客户端中也得到了相同的结果(无结果)。也许这是一个Web客户端的问题?

我在问题中展示的结果是使用Neo4j社区1.8M07版本和本地运行服务器以及Web客户端获得的。我确实看到您的链接中查询返回了预期结果。您如何知道console.neo4j.org正在运行1.8M07版本? - Rich Apodaca
1
这很令人困惑。在console.neo4j.org上的版本标记为current,我以为意味着M07。它也可以在控制台应用程序中的“1.8”和“1.7”(不是“1.6”)中运行。我在我的本地1.8M06和1.8M07上尝试了它,结果与你一样...也许更熟悉的人会加入讨论。 - Eve Freeman
我在Clojure中使用Neocons对本地服务器运行Cypher时也得到了相同的结果,因此这在一定程度上排除了Web客户端的问题(尽管它们可能都使用REST)。非常奇怪的是它在Web应用程序上可以工作,我也无法找到有关Cypher中数组字面量的任何文档。 - Eve Freeman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接