Neo4j Создание множества отношений со свойствами - PullRequest
0 голосов
/ 31 марта 2020

У меня много связей и узлов, которые мне нужно добавить в базу данных Neo4j с помощью функции создания. Функция сначала создает множество узлов, анализируя параметры и в основном используя этот запрос:

UNWIND $props AS map
CREATE (n)
SET n = map
SET n:Label1:Label2
RETURN count(n) AS nodeCount

Затем я проверяю, что количество узлов, которые нужно добавить (т. Е. Количество элементов, проанализированных в функции), равно на количество узлов, которые подсчитываются после выполнения запроса. Это прекрасно работает в C# с использованием драйвера Neo4j, потому что я просто использую:

await _session.WriteTransactionAsync(async tx =>
                {
                    var cursor = await tx.RunAsync(cypherQuery, parameters);
                    returnRecords = await cursor.ToListAsync();
                });

Где параметры - это просто JSON файл с параметрами для различных узлов.

Тогда я Я хочу создать отношения, но у них много свойств, поэтому я хотел бы использовать функцию C#:

RunAsync(cypherQuery, parameterDictionary)

и просто создать словарь с формой:

{string keyForPropsForRel1, object mapOfPropertiesForRel1},
{string keyForPropsForRel2, object mapOfPropertiesForRel2},
{string keyForPropsForRel3, object mapOfPropertiesForRel3}, ...

Затем просто проанализируйте элементы в запросе шифрования, сначала сопоставив все соответствующие узлы, затем развернув все параметры в карты, затем запустив все функции создания, а затем установив данные. Итак, следующим образом:

MATCH(r1start{id:"guid1"})
MATCH(r1end{id:"guid2"})
MATCH(r2start{id:"guid3"})
MATCH(r2end{id:"guid4"})
...

UNWIND $keyForPropsForRel1 AS mapForRel1
UNWIND $keyForPropsForRel2 AS mapForRel2
...

CREATE (r1start)-[rel1:TypeLabel]->(r1end)
CREATE (r2start)-[rel2:TypeLabel]->(r2end)
...

SET rel1 = mapForRel1
SET rel2 = mapForRel2
...

Это работает, но кажется утомительным. Я также не думал, как проверить, успешно ли он работает. У кого-нибудь есть хороший способ сделать то, что я пытаюсь сделать? Я пытаюсь избежать нескольких вызовов базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...