Neo4J ottiene il nodo tramite ID


85

Sto usando neo4j per uno dei miei progetti, c'è un nodo che ha solo una singola proprietà name, voglio ottenere quel nodo usando ID, ha già un ID ma quando uso questo codice

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

Non restituisce nulla, ecco il mio nodo

inserisci qui la descrizione dell'immagine

Se la query è sbagliata, come posso interrogarla utilizzando il numero


Quale strumento di visualizzazione di grafici utilizzi? Grazie. Conosco yworks.com/neo4j-explorer una buona opzione per la personalizzazione.
MyUserInStackOverflow

Risposte:


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

La IDfunzione ti fornisce l'id di un nodo o di una relazione. Questo è diverso da qualsiasi proprietà chiamata ido IDcreata dall'utente.


1
c'è un modo diverso per ottenere dati come (s: SomeLabel {id: 65110})?
DonkeyKong

@DonkeyKong No, perché puoi anche aggiungere la proprietà id, che è qualcos'altro rispetto all'id. Una proprietà id può avere qualsiasi tipo, mentre il nodo o edge id è un numero intero senza segno, collegato a una posizione nella struttura interna di Neo4J.
pvoosten

25
DISCLAIMER STANDARD: non utilizzare ID Neo4j interni per l'identificazione di entità a lungo termine. Le versioni future di Neo4j potrebbero spostare questi ID per scopi di prestazioni. Crea la tua proprietà ID univoca (idealmente con a CONSTRAINT) per il monitoraggio delle entità
Brian Underwood,

Aggiunta del paragrafo della documentazione ufficiale di cypher se qualcuno è interessato: neo4j.com/docs/cypher-manual/current/clauses/match/…
Ziemowit Stolarczyk

13

Attenzione: la seguente risposta non è corretta! START deve essere utilizzato solo quando si accede agli indici legacy . È disabilitato in Cypher 2.2 e versioni successive .

Neo4j consiglia di utilizzareWHERE ID(n) = e afferma inoltre che richiederà solo una singola ricerca (non esegue la scansione di ogni nodo per trovare l'ID corrispondente)

Mantenere questa risposta per evitare che qualcuno commetta lo stesso errore.

È possibile utilizzare WHERE ID(s) = 65110, ma questo sarà controllare l'ID di ogni nodo nel database.

C'è un modo più efficiente per farlo:

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

I risultati di EXPLAIN e PROFILE per una semplice query mi hanno mostrato che @Code aveva ragione. Perché questo non è nei documenti?
Sonata

@Sonata Quale versione stai utilizzando? Le versioni più recenti di Neo4j dovrebbero rendere START obsoleto.
Codebling

3.0.7. Dai un'occhiata a Result Detailsquesti esempi nella console: console.neo4j.org/r/dbz1we (facendo un AllNodesScan) e console.neo4j.org/r/9076wd (facendo un NodeById)
Sonata

@Sonata Non sono sicuro del motivo per cui sta accadendo. Prima di tutto, non dovrebbe funzionare: i documenti affermano che START è deprecato a partire da Cypher 2.0 e disabilitato a partire da Cypher 2.2, ma chiaramente funziona ancora. In secondo luogo, MATCH with ID dovrebbe essere un +NodeByIdSeeknodo che accede solo a 1 ma per qualche motivo sta facendo un +AllNodesScan.
Codebling

4

si può dire:

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

questo restituirà tutti i nodi di tipo Utente con ID di riferimento del nodo superiore a 20

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.