EXISTS() функция может быть использована для проверки существования шаблон, и в вашем случае вы можете заменить свой ДОПОЛНИТЕЛЬНЫЙ МАТЧ.
Кроме того, переменные в ваших шаблонах не нужны, если вы не собираетесь их использовать, поэтому вам вообще не нужны эти отношения в ваших отношениях.
MATCH (n:users_master)-[:FOLLOW]->(m:users_master)
WHERE id(m)=35
RETURN n, EXISTS((n)<-[:FOLLOW]-(m)) as flag
«флаг» будет отдельный столбец с булевым на том или нет последующего взаимно.
Что касается добавления «виртуального объекта», то в Neo4j 3.1+ вы можете использовать Map Projection, чтобы добавить пользовательские значения к проекции карт возвращенных узлов.
Вы можете использовать этот запрос с картографической проекции, чтобы включить флаг в возвращении свойств узла:
MATCH (n:users_master)-[:FOLLOW]->(m:users_master)
WHERE id(m)=35
RETURN n {.*, flag: EXISTS((n)<-[:FOLLOW]-(m)) }
EDIT
картографической проекции, используемый в запросе выше, был введен и работает только в Neo4j 3.1.x и выше.
Для версий 3.0.x я не верю, что существует множество вариантов для извлечения всех свойств узла на карте и добавления нового значения к этой карте перед возвратом (предложение SET зарезервировано для узлов, а не для карт).
Возможно, вам понадобится установить APOC procedures для обходного пути, так как он предоставляет несколько вспомогательных процедур и функций, включая map operations.
Это должно работать после того, как соответствующая версия АПБО добавляется к экземпляру Neo4j:
MATCH (n:users_master)-[:FOLLOW]->(m:users_master)
WHERE id(m)=35
RETURN apoc.map.setKey(properties(n), 'flag', EXISTS((n)<-[:FOLLOW]-(m))) as n
Отношения в вашем ФАКУЛЬТАТИВНОМ MATCH имеет стрелки на обоих концах, вы можете исправить это до. Кроме того, вместо 1 и 0, будет ли логическое возвращение работать для вас? Это можно сделать очень легко. – InverseFalcon
извините стрелку, это ошибочно, я удалил это – shivshankar