2015-05-05 16 views
5

Có lẽ cách tiếp cận này là sai, nhưng tôi đã xây dựng một truy vấn cypher bằng cách sử dụng kết hợp tùy chọn và thu thập. Nếu có dữ liệu mọi thứ đều tốt, nếu không, thu thập trả về null cho các thuộc tính được chỉ định. Có vẻ như điều này được mong đợi theo tài liệu.neo4j tùy chọn phù hợp và null

Lý tưởng nhất là tôi muốn thu thập để trả lại một mảng trống hoặc không có giá trị khi không có kết quả phù hợp. Tôi đang sử dụng những điều sau đây ...

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 

Trả lời

10

Hãy thử như thế này

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 

này sẽ kiểm tra xem dữ liệu có mặt để thu thập hay không nếu có thì nó sẽ trở lại khác giá trị null sẽ được trả lại

+0

Cảm ơn vì điều này, nó đã làm các trick. Mặc dù trong trường hợp các trình điều khiển có lỗi đánh máy, nó sẽ là WHEN ** u ** IS NOT NULL. Tôi sẽ chỉnh sửa nhưng tôi không thể. – user2704643

+0

Tôi đã chỉnh sửa nó, Cảm ơn :) –

Các vấn đề liên quan