Как добавить несколько меток, используя разные, используя APO C для neo4j - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь добавить несколько меток к узлам, используя запрос шифра, я хотел бы добавить 2 метки:

  1. title
  2. team

оба существуют в подпорках узла:

CREATE (p:Person {id: 1, name: bob, title:developer, team: team1});

Следующее работает и добавляет заголовок в качестве метки:

match (n:Person)
with distinct n.title as title, collect(distinct n) as persons
call apoc.create.addLabels(persons, [apoc.text.upperCamelCase(title)]) yield node
return * 

Вместо того, чтобы снова выполнить тот же запрос с атрибутом team, Я хотел бы использовать тот же с несколькими районами значения что-то вроде:

with distinct n.title as title and with distinct n.team as team collect(distinct n) as persons

, который не работает, есть идеи, если это возможно? или я должен выполнить 2 разных запроса для этого?

1 Ответ

1 голос
/ 11 апреля 2020

Я не уверен, что понимаю требование для отдельных значений, поскольку 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 автоматически игнорирует дубликаты.

...