Я не уверен, что понимаю требование для отдельных значений, поскольку apoc.create.addLabels
будет игнорировать метки, которые уже существуют на целевом узле.
Например, с учетом следующих тестовых данных:
MERGE (: Person { id: 1, name: 'Both Properties', title: 'some title', team: 'some team' })
MERGE (: Person { id: 2, name: 'Only title', title: 'some title' })
MERGE (: Person { id: 3, name: 'Only team', team: 'some team' })
MERGE (: Person { id: 4, name: 'Neither team nor title' })
MERGE (: Person { id: 5, name: 'Same team and title', title: 'admin', team: 'admin' })
Следующее создаст список меток, которые будут созданы из двух свойств, а затем установите их:
MATCH (p: Person)
WITH p, [x in [p.title] + [p.team] WHERE x IS NOT NULL | apoc.text.upperCamelCase(x)] as desiredTitles
CALL apoc.create.addLabels(p, desiredTitles) YIELD node
RETURN p.name, labels(p)
╒════════════════════════╤═════════════════════════════════╕
│"p.name" │"labels(p)" │
╞════════════════════════╪═════════════════════════════════╡
│"Both Properties" │["Person","SomeTitle","SomeTeam"]│
├────────────────────────┼─────────────────────────────────┤
│"Only title" │["Person","SomeTitle"] │
├────────────────────────┼─────────────────────────────────┤
│"Only team" │["Person","SomeTeam"] │
├────────────────────────┼─────────────────────────────────┤
│"Neither team nor title"│["Person"] │
├────────────────────────┼─────────────────────────────────┤
│"Same team and title" │["Person","Admin"] │
└────────────────────────┴─────────────────────────────────┘
Если какое-либо из свойств равно нулю, то понимание списка в WITH
оператор удалит их, и если они одинаковые, APO C автоматически игнорирует дубликаты.