Neo4j比较两个数组,Cypher查询

时间:2020-10-23 11:29:54

标签: neo4j cypher

是否有一种方法可以比较Neo4j密码查询中的两个数组?我已经为每个amenities创建了一些房地产,它们都是用逗号分隔的字符串属性。

我需要获取所有标记为Estate的节点,其中amenities split包含array parameter

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

如何实现?

1 个答案:

答案 0 :(得分:1)

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

  2. 如果要测试amenities是否包含列表中的 all 个值,可以使用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