Neo4j сравнивает два массива, шифровальный запрос

#neo4j #cypher

#neo4j #шифр

Вопрос:

Есть ли способ сравнить два массива в Neo4j запросе cypher? У меня уже есть объекты недвижимости, созданные для каждого свойства some amenities as string, разделенного запятой.

Мне нужно, чтобы все узлы были помечены Estate как amenities split содержащие array parameter .

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

Как этого добиться?

Комментарии:

1. Используйте любой или весь оператор

Ответ №1:

  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