Я думаю, вы не совсем четко определили, что вы хотите в запросе.
Вы запросили: узлы профиля, которые имеют: отношение взаимодействия с узлом без 'foo' в его свойстве содержимого.
Это полностью отличается от запроса: узлы профиля, которые не имеют никакого отношения к узлу с 'foo' в его свойстве содержимого.
Есть несколько способов получить то, что вы хотите
MATCH (profile:Profile)
OPTIONAL MATCH (profile)-[:INTERACTION]->(i)
WHERE 'foo' IN i.content
WITH profile
WHERE i IS NULL
RETURN profile
или
MATCH (profile:Profile)
WITH profile, [(profile)-[:INTERACTION]->(i) WHERE 'foo' IN i.content | i] as fooInteractions
WHERE size(fooInteractions) = 0
RETURN profile
Также, как отметил cybersam, вы используете ключевое слово IN, которое предназначено для проверки членства в списке, но вы указали, что у вас есть значения, такие как i.content = 'foo'
, поэтому вы можете неправильно использовать это.
Если так, то это сделает правильный запрос намного проще, чем приведенные выше:
MATCH (profile:Profile)
WHERE NOT (profile)-[:INTERACTION]->(i {content:'foo'})
RETURN profile
И, как отметили в cybersam, ваша формулировка предполагает, что, возможно, вы действительно хотите проверить свойство content
отношения: ВЗАИМОДЕЙСТВИЕ. Если это действительно то, что вам нужно, то вместо этого переместите {content:'foo'}
в отношение: ВЗАИМОДЕЙСТВИЕ в шаблоне.