2016-03-09 2 views
1

У меня есть узлы User и узел Intersets. Я хочу иметь возможность задать массив интересов для создания/удаления/изменения отношений между User и Interests. Я также хочу, чтобы в том же запросе обновлялись некоторые свойства на пользовательском узле.Neo4j как создавать/удалять отношения из набора идентификаторов узлов

До сих пор это то, что я есть MENAGE сделать:

MATCH (user:User {id: id}) 
OPTIONAL MATCH (user)-[oldRel:InterestedIn]->(:Interest) 
DETACH DELETE oldRel 
WITH user 
UNWIND {interestsIds} as id 
MATCH (interest:Interest {id: id}) 
MERGE (user)-[rel: InterestedIn]->(interest) 
SET user.name = {user}.name, ..(more sets) 
RETURN user, collect(interest) as interests 

Я думаю, что это один работает Тхо некоторое время выглядит interests возвращаются дублируется .. А этот запрос выглядит немного переполнения. Любая идея, как сделать этот запрос с лучшим способом?

ответ

2

Это похоже на право?

MATCH (user:User {id: id}) 
OPTIONAL MATCH (interest:Interest) 
WHERE interest.id IN {interestsIds} 
MERGE (user)-[:InterestedIn]->(interest) 

WITH DISTINCT user 
MATCH (user)-[rel:InterestedIn]->(interest:Interest) 
WHERE NOT(interest.id IN {interestsIds}) 
DELETE rel 

WITH DISTINCT user 
MATCH (user)-[:InterestedIn]->(interest:Interest) 
RETURN user, collect(interest) 
+0

Как я могу вернуть все новые интересы из этого запроса? – tubu13

+0

Также при отправке пустого '{interestIds} ничего не происходит, я получаю пустые результаты. – tubu13

+0

Я только что редактировал, чтобы позаботиться о пустом' {interestIds} 'случае. Я не совсем уверен, как вернуть новые интересы. Вы имеете в виду только те, которые были созданы, или вы имеете в виду все интересы, которые привязаны к пользователю после завершения запроса? –

Смежные вопросы