2013-07-18 12 views
16

ho capito che è possibile utilizzare il simbolo jolly (*) per restituire tutti i riferimenti in una query Cypher, come ad esempio:Come posso restituire tutte le proprietà per un nodo utilizzando Cypher?

MATCH p:Product WHERE p.price='1950' RETURN *; 

    ==> +----------------------------------------------------------------+ 
    ==> | p                | 
    ==> +----------------------------------------------------------------+ 
    ==> | Node[686]{title:"Giorgio Armani Briefcase",price:"1950",... | 
    ==> +----------------------------------------------------------------+ 

Tuttavia, il risultato è una riga con un singolo nodo 'colonna' denominata " p ", da cui è possibile accedere alle proprietà. Tuttavia, mi piacerebbe che le "righe" di set di risultati avessero i nomi delle proprietà come "colonne". Qualcosa di simile:

MATCH p:Product WHERE p.price='1950' RETURN p.*; 

    ==> +-------------------------------------------+ 
    ==> | title | price | ...      | 
    ==> +-------------------------------------------+ 
    ==> | "Giorgio Armani Briefcase" | "1950" | ... | 
    ==> +-------------------------------------------+ 

Quel particolare query non è valida, ma c'è un modo per ottenere lo stesso risultato (a corto di messa in vendita di tutte le proprietà in modo esplicito, come in p.title, p.price, p .. .)?

risposta

20

Non si può fare questo in Cypher ancora. Penso che sarebbe una bella caratteristica, se vuoi richiederla.

Modifica (grazie per il commento segnalarlo): È ora possibile fare questo come di 2.2:

MATCH (p:Product) WHERE p.price='1950' RETURN keys(p); 
+0

Qualcuno ha già richiesto questa funzione? –

+1

Sembra: https://github.com/neo4j/neo4j/issues/164 e https://trello.com/c/FciCdgWl –

+3

È possibile ottenere una raccolta di chiavi utilizzando la funzione 'keys' introdotta in 2.2 ma non c'è modo di accedere a una proprietà utilizzando una chiave stringa dinamica come richiesto qui :(http://stackoverflow.com/questions/29996741/how-to-access-and-mutate-node-property-value-by-the-property -name-string-in-cyph –

2

È possibile utilizzare la clausola 'as' e identificare ciascuna proprietà e ciò che si desidera venga denominata. Dovrai identificare ciascuna proprietà che desideri venga restituita individualmente.

es:

MATCH p.product where WHERE p.price='1950' RETURN p.price as price, p.title as title, p.whatever, as anythingYouWant 
+2

Grazie per la punta. Come succede, il mio codice viene generato in modo che il generatore conosca staticamente i nomi delle proprietà e io abbia generato qualcosa di simile - sebbene si usi 'p.price? come prezzo' per proprietà 'nullable' (assenti). – DavidJ

-2

Sono nuovo di Cypher, ma sembra che questo restituisce tutte le chiavi per un particolare tipo di nodo:

MATCH (p:product) RETURN keys(p) 

Funziona in Neo4J 3.0.

6

Giusto per espandere su come ottenere le chiavi:

MATCH (p:product) WITH DISTINCT keys(p) AS keys 
UNWIND keys AS keyslisting WITH DISTINCT keyslisting AS allfields 
RETURN allfields; 
7

Nella versione più recente di Cypher properties(n) restituirà tutte le chiavi e le proprietà di un nodo. Sembra funzionare solo per un singolo nodo però.

Spero che questo aiuti le persone.

2

È possibile restituire n nella query di cypher, restituirà tutte le chiavi e le proprietà di un nodo. ad es .: MATCH (n:People) n
Ciò restituirà
n:
{ "Date_of_Birth": "1981-04-23 00:00:00", "Employee_Last_Name": "Aaaa", "Employee_First_Name": "Baaa", "Age": 36, "Employee_Status": "Active" }

Problemi correlati