Итак, во-первых, вы не можете динамически присваивать имена переменных, это невозможно в Cypher.
Но ... используя процедуры APOC, вы можете создать карту с именем строки (вашей меткойName) для узла, который высоздайте, а затем выполните динамический поиск на карте, чтобы добраться до ваших узлов.
Кроме того, вы не можете динамически устанавливать метку с помощью Cypher, но снова мы можем использовать для этого процедуры APOC.
Мы можем снова использовать APOC, чтобы удалить свойство из входных карт для установки свойств.
Вот пример.Обратите внимание, что вы не можете использовать строковые ключи в кавычках на своих картах, поэтому я удалил их:
UNWIND [
{
name: "John",
age: 18.0,
label: "Person",
labeledName: "Unit1"
},
{
name: "Phill",
age: 23.0,
label: "Animal",
labeledName: "Unit2"
}
] as input // though you would typically pass this as a map parameter
CREATE (n)
WITH input, n
CALL apoc.create.addLabels(n, [input.label]) YIELD node
SET n += apoc.map.removeKeys(input, ['label', 'labeledName'])
WITH collect([input.labeledName, n]) as pairs
WITH apoc.map.fromPairs(pairs) as mapping
...
С этим сопоставлением вы можете искать значение по ключу: mapping['Unit2']
даст вам соответствующийузел, и передаваемая вами строка может быть динамической из строковой переменной.