2016-09-08 1 views
0

Ich habe versucht, die Etiketten eines Knotens dynamisch, aber nicht erfolgreich aktualisiert. Ich möchte alle Beschriftungen eines Knotens entfernen, und dann wollte ich eine neue Liste von Beschriftungen für denselben Knoten festlegen.Entfernen Sie alle Etiketten und setzen Sie eine neue Liste von Etiketten Dynamisch

Mein Ansatz (fehlgeschlagen ist, versucht, die Etiketten zu entfernen only):

Ich vermute, dass, kippe die Etiketten dynamisch die Referenzen unter Verwendung geändert werden. Ist mein Verständnis richtig? Und wie können wir das erreichen?

+0

I Ich bin mir nicht sicher, ob ich Ihr Problem richtig verstanden habe, aber versuchen Sie es mit dieser Frage. Es kann vorhandene Labels entfernen und das neue auf einmal anwenden. Ich nehme "NewLabel" als existierendes und "Person" & "Profession" als das neue, das gesetzt werden soll. Sie können Ihre eigenen Bedingungen beim Abgleich setzen. 'match (n) ENTFERNEN n: NewLabel SET n: Person: Beruf return n' – Gandalf

+0

Wenn Sie nicht wissen, dass das vorhandene Label 'NewLabel' ist, wie entfernen Sie dann das Label? –

Antwort

3

Nein, wie Sie sagen, dynamische Etiketten Änderungen sind nicht möglich mit rohen Chiffre. Hauptsächlich weil Beschriftungen, Eigenschaftsschlüssel und Beziehungstypen Teil des Abfrageplans sind und zum Zwischenspeichern verwendet werden.

Es besteht die Möglichkeit Etiketten mit den APOC Verfahren dynamisch hinzuzufügen, wie hier erklärt:

https://neo4j-contrib.github.io/neo4j-apoc-procedures/#_using_cypher_and_apoc_to_move_a_property_value_to_a_label

MATCH (n:Movie) 
CALL apoc.create.addLabels(id(n), [ n.genre ]) YIELD node 
REMOVE node.studio 
RETURN node 

Vielleicht könnte eine Funktion zu ersetzen/entfernen vorhandene Etiketten eine schöne Ergänzung zu der APOC sein .

UPDATE

Nachdem die Quelle der APOC Überprüfung gibt es ein Verfahren, das setLabels nicht passende Etiketten weitergegeben entfernen wird, zum Beispiel:

WITH ["A","B"] as labels 
MATCH (m:Movie) 
WITH collect(id(m))[0..20] as movies, labels 
CALL apoc.create.setLabels(movies, labels) YIELD node RETURN node, labels(node) 


│node       │labels(node)│ 
╞══════════════════════════════╪════════════╡ 
│{tagline: Prepare to enter a s│[B, A]  │ 
│ecret world of assassins, titl│   │ 
│e: Ninja Assassin, released: 2│   │ 
│009}       │   │ 
├──────────────────────────────┼────────────┤ 
│{tagline: Walk a mile you'll n│[B, A]  │ 
│ever forget., title: The Green│   │ 
│ Mile, released: 1999}  │   │ 
├──────────────────────────────┼────────────┤ 
│{tagline: 400 million people w│[B, A]  │ 
│ere waiting for the truth., ti│   │ 
│tle: Frost/Nixon, released: 20│   │ 
│08}       │   │ 
├──────────────────────────────┼────────────┤ 
│{tagline: He didn't want law. │[B, A]  │ 
│He wanted justice., title: Hof│   │ 
│fa, released: 1992}   │   │ 
├──────────────────────────────┼────────────┤ 

Problem gelöst :)

Verwandte Themen