2015-05-05 13 views
5

Vielleicht ist dieser Ansatz falsch, aber ich habe eine Abfrage mit optionalen Abfragen Catch und Abfrage sammeln. Wenn Daten vorhanden sind, ist alles in Ordnung. Wenn nicht, gibt collect null für die angegebenen Eigenschaften zurück. Es sieht so aus, als ob dies gemäß den Dokumenten erwartet wird.neo4j optionale Übereinstimmung und Null

Idealerweise möchte ich sammeln, um ein leeres Array oder Null zurückgeben, wenn keine Übereinstimmung gefunden wird. Ich bin die folgende Verwendung ...

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 

Antwort

10

Versuchen Sie, wie dies

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 

Dies wird prüfen, ob Daten vorhanden sind, zu sammeln oder nicht, wenn vorhanden, dann wird es zurückgeben sonst Null-Wert wird

zurückgegeben werden
+0

Danke dafür, es hat den Trick gemacht. Obwohl es bei Treibern einen Tippfehler gibt, wäre es WENN ** u ** NICHT NULL ist. Ich würde bearbeiten, aber ich kann nicht. – user2704643

+0

Ich habe es bearbeitet, Danke :) –

Verwandte Themen