Я только что видел (здесь: http://docs.neo4j.org/chunked/1.9/deprecations.html), что! оператор для выражений свойства Cypher будет устаревшим с выпуском Neo4j 2.0. Поэтому я пошел переформулировать мои существующие запросы Cypher и столкнулся с следующей проблемой.Cypher: проблема с заменой! оператор недвижимости
1,9 запрос: START n=node(*) WHERE NOT "NO_FACET" in n.uniqueLabels! RETURN n limit 2;
Что я получаю: Узлы, которые либо не имеют свойство «uniqueLabels» на все или узлах, которые обладают этим свойством, но не содержат значение «NO_FACET».
Приведенная выше ссылка говорит об обходе таких выражений, делая отметку has(n.uniqueLabels" AND NOT "NO_FACET" IN n.uniqueLabels
. Этот запрос работает, но это, очевидно, не то, что я хотел (я также хотел, чтобы узлы вернулись, у которых вообще нет свойства). Предлагаемое обход выглядит как ленивый И-оценка, которая будет хорошо для меня. Так что я сделал это:
START n=node(*) WHERE NOT (has(n.uniqueLabels) AND "NO_FACET" in n.uniqueLabels) RETURN n limit 2;
Но здесь я получаю сообщение об ошибке: ==> EntityNotFoundException: The property 'uniqueLabels' does not exist on Node[0]
Так оценка не настолько ленивы, в конце концов? Странная вещь, этот запрос работает:
START n=node(*) WHERE has(n.uniqueLabels) AND "NO_FACET" in n.uniqueLabels RETURN n limit 2;
Он просто дает мне прямо противоположное тому, что я хотел, конечно.
На самом деле я могу получить то, что я хочу без оператора, как это:
START n=node(*) WHERE NOT has(n.uniqueLabels) OR (has(n.uniqueLabels) AND NOT "NO_FACET" in n.uniqueLabels) RETURN n limit 2;
Но я не уверен, если это то, как он был предназначен, когда оператор был устаревшим. Таким образом, вопрос заключается в том, упускаю ли я правильный путь для этого или если поведение И в сочетании с НЕ вне круглых скобок является ошибкой, возможно?
И кстати: Кто-нибудь теперь, почему! во-первых, оператор устарел? Мне нравится ;-)
Благодарим за понимание и с наилучшими пожеланиями!
Правильно, я мог бы, конечно, просто переформулировать запрос. Но так как страница устаревания дает инструкции о том, как заменить оператора, мне было интересно, почему это, похоже, не будет работать, так как все становится немного сложнее. Это оставляет мне два варианта: ничего не меняйте и подождите, пока эта проблема не будет решена, или не переформулируйте все мои запросы, не рискуя сделать ненужную работу. На данный момент я буду выбирать, потому что все работает в данный момент. – khituras
Возможно, это была одна из тех ситуаций, которые они не учитывали при настройке страницы вверх. – Nicholas