首页 > 解决方案 > Neo4j 比较两个数组,Cypher Query

问题描述

有没有办法比较Neo4j密码查询中的两个数组?我已经为每个创建了房地产,其中一些amenities是用逗号分隔的字符串属性。

我需要将所有节点标记Estateamenities split包含array parameter

MATCH (e:Estate)
WHERE (a IN ["Laundry","Dryer"] WHERE a IN SPLIT(e.amenities,","))
RETURN e

如何做到这一点?

标签: neo4jcypher

解决方案


  1. amenities对于您的用例,更新为包含字符串列表而不是单个逗号分隔的字符串会更有效。这样,您的查询根本不需要使用SPLIT。在以下示例中,我将继续使用SPLIT(e.amenities,","),但理想情况下应将其替换为e.amenities

  2. 如果要测试是否amenities包含列表中的所有值,可以使用ALL函数:

    MATCH (e:Estate)
    WHERE ALL(a IN ["Laundry","Dryer"] WHERE a IN SPLIT(e.amenities,","))
    RETURN e
    
  3. 如果要测试是否amenities包含列表中的任何值,可以使用ANY函数:

    MATCH (e:Estate)
    WHERE ANY(a IN ["Laundry","Dryer"] WHERE a IN SPLIT(e.amenities,","))
    RETURN e
    

推荐阅读