2015-05-05 12 views
5

Forse questo approccio è sbagliato ma ho creato una query di tipo criptato utilizzando corrispondenze e raccolte facoltative. Se ci sono dati tutto va bene, in caso contrario, raccogliere i ritorni nulli per le proprietà specificate. Sembra che questo sia previsto secondo i documenti.corrispondenza opzionale neo4j e null

Idealmente mi piacerebbe raccogliere per restituire un array vuoto o null quando non vi è alcuna corrispondenza. Sto utilizzando il seguente ...

MATCH (p) WHERE id(p) = 11 
OPTIONAL MATCH (p) -[:car]- (c) 
OPTIONAL MATCH (p) -[:driver]- (u) 
RETURN { 
    _id: id(p), name: p.name, type: p.type, 
    cars: collect({_id: id(c), name: c.name}), 
    drivers: collect({_id: id(u), name: u.email}) 
} AS place 

risposta

10

Prova come questo

MATCH (p) WHERE id(p) = 11 
OPTIONAL MATCH (p) -[:car]- (c) 
OPTIONAL MATCH (p) -[:driver]- (u) 
RETURN { 
    _id: id(p), name: p.name, type: p.type, 
    cars: CASE WHEN c IS NOT NULL THEN collect({_id: id(c), name: c.name}) ELSE NULL END, 
    drivers: CASE WHEN u IS NOT NULL THEN collect({_id: id(u), name: u.email}) ELSE NULL END 
} AS place 

Questo controllerà se i dati è presente per raccogliere o non se presente, allora tornerà altro valore nullo verrà restituito

+0

Grazie per questo, ha fatto il trucco. Anche se nel caso di driver c'è un errore di battitura, sarebbe QUANDO ** u ** NON È NULL. Vorrei modificare ma non posso. – user2704643

+0

L'ho modificato, grazie :) –