Neo4J Knoten anhand der ID abrufen


82

Ich verwende neo4j für eines meiner Projekte. Es gibt einen Knoten, der nur eine einzige Eigenschaft namehat. Ich möchte diesen Knoten mithilfe der ID abrufen. Er hat bereits eine ID, aber wenn ich diesen Code verwende

MATCH (s:SKILLS{ID:65110}) return s

Es gibt nichts zurück, hier ist mein Knoten

Geben Sie hier die Bildbeschreibung ein

Wenn die Abfrage falsch ist, wie frage ich sie dann anhand der Nummer ab


Welches Grafikvisualisierungstool verwenden Sie? Vielen Dank. Ich kenne von yworks.com/neo4j-explorer eine gute Option für die Anpassung.
MyUserInStackOverflow

Antworten:


135
MATCH (s)
WHERE ID(s) = 65110
RETURN s

Mit dieser IDFunktion erhalten Sie die ID eines Knotens oder einer Beziehung. Dies unterscheidet sich von jeder Eigenschaft, die aufgerufen wird idoder IDdie Sie erstellen.


1
Gibt es eine andere Möglichkeit, Daten wie (s: SomeLabel {id: 65110}) abzurufen?
DonkeyKong

@DonkeyKong Nein, da Sie auch die Eigenschaft id hinzufügen können, die etwas anderes als die ID ist. Eine id-Eigenschaft kann einen beliebigen Typ haben, während die Knoten- oder Kanten-ID eine vorzeichenlose Ganzzahl ist, die mit einer Position in der internen Struktur von Neo4J verknüpft ist.
pvoosten

25
STANDARD-HAFTUNGSAUSSCHLUSS: Verwenden Sie keine internen Neo4j-IDs zur langfristigen Identifizierung von Entitäten. Zukünftige Versionen von Neo4j können diese IDs aus Leistungsgründen verschieben. Erstellen Sie Ihre eigene eindeutige ID-Eigenschaft (idealerweise mit a CONSTRAINT) für die Verfolgung von Entitäten
Brian Underwood

Hinzufügen eines offiziellen Cypher-Dokumentationsabsatzes, wenn jemand interessiert ist: neo4j.com/docs/cypher-manual/current/clauses/match/…
Ziemowit Stolarczyk

12

Warnung: Die folgende Antwort ist falsch! START sollte nur beim Zugriff auf ältere Indizes verwendet werden . Es ist in Cypher 2.2 und höher deaktiviert .

Neo4j empfiehlt die VerwendungWHERE ID(n) = und gibt außerdem an, dass nur eine einzige Suche erforderlich ist (scannt nicht jeden Knoten, um die passende ID zu finden).

Behalten Sie diese Antwort bei, um zu verhindern, dass jemand denselben Fehler macht.

Sie können verwenden WHERE ID(s) = 65110, dies überprüft jedoch die ID jedes Knotens in Ihrer Datenbank.

Es gibt einen effizienteren Weg, dies zu tun:

START s=NODE(517) MATCH(s) RETURN s

Die Ergebnisse von EXPLAIN und PROFILE für eine einfache Abfrage zeigten mir, dass @Code richtig war. Warum steht das nicht in den Dokumenten?
Sonate

@ Sonata Welche Version laufen Sie? Neuere Versionen von Neo4j sollten START überflüssig machen.
Codebling

3.0.7. Schauen Sie sich die folgenden Result DetailsBeispiele in der Konsole an: console.neo4j.org/r/dbz1we (AllNodesScan) und console.neo4j.org/r/9076wd (NodeById)
Sonata

@ Sonata Ich bin mir nicht sicher, warum das passiert. Zunächst sollte es nicht funktionieren - Dokumente besagen, dass START ab Cypher 2.0 veraltet und ab Cypher 2.2 deaktiviert ist, aber es funktioniert eindeutig immer noch. Zweitens sollte MATCH mit ID +NodeByIdSeeknur auf 1 Knoten zugreifen, aber aus irgendeinem Grund wird ein Knoten ausgeführt+AllNodesScan .
Codebling

3

Sie können sagen:

(n:User) where id(n) >=20 RETURN n

Dadurch werden alle Knoten vom Typ Benutzer mit einer Knotenreferenz-ID von mehr als 20 zurückgegeben

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.