Как я могу добавить соединение к узлу, который может не существовать?

#neo4j

Вопрос:

Я в восторге от нового, connectOrCreate но не знаю, как его использовать. Надеялся, что смогу получить какую-нибудь помощь.

У меня есть такая структура:

(t:Topic)-[:VOTE_HAS_THING]-(v:Vote)-[:VOTE_HAS_FACT]-(d:Detail)

Что, по сути, позволяет пользователям голосовать за конкретные комбинации деталей/тем. Голоса пользователей выглядят так:

(u:User)-[:VOTED]-(v:Vote)

И я хотел бы использовать запросы СЛИЯНИЯ, подобные этому:

Где thing.id = X и detail.id = Y, найдите и подключите соответствующий узел голосования или создайте его, если он не существует.

Я не планирую создавать узлы голосования до тех пор, пока они не понадобятся, поэтому я думаю, что заявления о СЛИЯНИИ будут иметь смысл здесь, есть идеи? Должен ли я использовать а createVotes в качестве мутации верхнего уровня?

По сути, мой вопрос заключается в следующем: могу ли я добавить отношения между User и Vote и, если Vote их не существует, затем создать его, а затем подключить пользователя.

Должен ли я сделать идентификатор Vote узла чем-то, что я могу «угадать», что было бы просто Topic.id Detail.id? Так что я могу просто проверить, существует ли этот идентификатор, если нет, то создать его?

Комментарии:

1. Если я могу обновить узел или создать его, если он еще не существует, я мог бы сделать это, а затем добавить в него пользователя. Может ли это быть один вопрос?

2. Вы можете использовать MERGE оператор , который эквивалентен «СОПОСТАВИТЬ», если узел существует, или «СОЗДАТЬ» в противном случае. Тем не менее, я не знаю, к какому языку/структуре это connectOrCreate относится, поэтому я не могу сказать вам больше.

3. Да, извините, я имею в виду, что делаю это с помощью GraphQL здесь, я должен был указать это раньше!