#neo4j #cypher
#neo4j #cypher
Вопрос:
Я использую что-то подобное в запросе NEO4J
return [1] in [3,25,6,2,4,1]
и возвращает true .
Однако, когда я выполняю что-то вроде
return [1,2] in [3,25,6,2,4,1]
он возвращает false .
Итак, вопрос в том, как указывается для работы с оператором IN в списках. Я не смог найти никаких спецификаций по этому вопросу, и я не уверен, соответствует ли он всем версиям.
Комментарии:
1. В версии 3.0.3 это
return [1] in [3,25,6,2,4,1]
возвращаетfalse
.
Ответ №1:
Если это когда-либо работало, я почти уверен, что это ошибка (хотя я все еще ищу проблему с github). Поведение, которое вы ищете, должно быть достигнуто с помощью ALL
.
RETURN ALL(x IN [1, 2] WHERE x IN [3, 25, 6, 2, 4, 1])
Коллекции ( neo4j
списки) не являются наборами, они могут иметь повторяющиеся записи, поэтому IN
следует ожидать выполнения проверки принадлежности, а не пересечения. Операции Set в настоящее время отнесены к apoc
или другим внешним процедурам.
Однако, если ваш первый операнд представляет собой список, он проверит, соответствует ли весь этот список какому-либо отдельному элементу во втором операнде. Так, например, [1, 2] IN [[1, 2], [3, 4]]
вернет true
, но [1, 2] IN [1, 2, 3, 4]
вернет `false .