首页 > 解决方案 > Neo4j 中的 ANY 和 IN 子句有什么区别?

问题描述

Neo4j 有两个不同的子句来查找数组中的值,ANY 和 IN。请解释一下,它们有何不同,因为它们都用于通过检查指定的值是否存在于数组中来过滤数据。 在此处输入图像描述

查询#1: MATCH (n) WHERE any(color IN n.liked_colors WHERE color = 'yellow') RETURN n

结果#1:名为 Eskil 的节点

查询#2:匹配 (n) 其中 n.liked_colors 中的“黄色”返回 n

结果#2:名为 Eskil 的节点

如果两个查询都返回相同的结果,那么差异在哪里。

标签: neo4jcyphergraph-databases

解决方案


在您的简单示例中,结果是相同的。

然而any(),允许更复杂的过滤方式,特别是当我们不使用它来简单地检测列表中已知值的成员资格时:

MATCH (n:Person) 
WHERE any(color in n.liked_colors WHERE (n)<-[:KNOWS|MARRIED*]-(other:Person {eyes:color}))

找到一个人,对于他们喜欢的任何颜色,我们可以遍历给定的模式以找到另一个具有该颜色眼睛的人。


推荐阅读