как добавить атрибут перед возвратом узла в neo4j - PullRequest
0 голосов
/ 16 мая 2019

Мне нужно вернуть коллекцию как атрибут узла. У меня есть личный узел, который может иметь несколько отношений с другим человеком.

enter image description here

Мне нужно вернуть всех людей, которые следуют за человеком А, и вернуть все отношения между ними как атрибут,

это запрос:

match (a: Person {email:' a@email.com '}) <- [: FOLLOW] - (x: Person)
with a, x
match (a) - [r] - (x) 
return x, collect (type (r)) as relations; 

Мне нужно добавить к персонажу x коллекцию 'отношения' в качестве атрибута узла 'x'

Это прямо противоположно тому, что объясняется здесь: 'https://neo4j.com/developer/kb/updating-a-node-but-returning-its-state-from-before-the-update/', в этом случае они возвращают снимок, но перед обновлением узла мне действительно нужно изменить снимок без фактического обновления узла Я пытаюсь:

match(a:Person{email:'a@email.com'})<-[:FOLLOW]-(x:Person) 
with a,x
match(a)-[r]-(x)
with properties(x) as snapshot, collect(type(r)) as relations;
set snapshot.relations = relations
RETURN snapshot

но когда я это сделал, это выдало мне эту ошибку: Ожидается ровно одно утверждение на запрос, но получено: 2

ОБНОВЛЕНИЕ: также сказал @ krishna-reddy, исключив ';' Исправляет вышеупомянутую ошибку, но теперь она показывает это: Neo.ClientError.Statement.SyntaxError: Несоответствие типов: ожидаемый узел или отношение, но был Map

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы можете использовать APOC plugin, в котором есть процедуры для создания Виртуальных узлов и отношений , которые не хранятся в базе данных.

Виртуальные узлы и отношения не существуют на графике, они возвращаются только пользовательскому интерфейсу / пользователю для представления проекции графика.Они могут быть визуализированы или обработаны иным образом.

MATCH(a:Person{email:'a@email.com'})<-[:FOLLOW]-(x:Person) 
WITH a,x
MATCH(a)-[r]-(x)
WITH x, collect(type(r)) AS relations
CALL apoc.create.vNode([head(labels(x))], x{.*,relations:relations}) YIELD node AS snapshot
RETURN snapshot
1 голос
/ 17 мая 2019
match(a:Person{email:'a@email.com'})<-[:FOLLOW]-(x:Person) 
with a,x
match(a)-[r]-(x)
with properties(x) as snapshot, collect(type(r)) as relations
set snapshot.relations = relations
RETURN snapshot

Просто удали; в строке 4.

...