2017-03-03 11 views
6

Với dưới đây truy vấn cypherneo4j thất bại một truy vấn trên một trận đấu thiếu thay vì trả lại trống mảng

MATCH (u:User {id: {userId}}), (b:B {id: {bId}) 
    CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c) 

Như bạn thấy, tôi là tạo ra một nút C rằng phải có mối quan hệ với 2 điều, một số nút b và một số người dùng.

Điều gì xảy ra là tôi nhận được một mảng trống khi u hoặc b không tồn tại, nhưng tôi muốn neo4j trả lời với một lỗi thay vì một mảng trống. Điều đó làm cho mọi việc dễ dàng hơn cho tôi để biết nút nào bị thiếu. Có thể 'buộc' một thất bại khi mệnh đề trận đấu không trả lại bất cứ điều gì?

Trả lời

7

Đó là cách hoạt động, nếu trả về MATCH trả về không thì truy vấn không thành công. Đó là lý do tại sao họ có sẵn OPTIONAL MATCH để nó không thành công nếu null được trả về.

Edit: thêm trở lại ở cuối như thế này

MATCH (u:User {id: {userId}}), (b:B {id: {bId}) 
CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c) 
RETURN 'success' 

Vì vậy, nếu bạn nhận được thành công lại có nghĩa là trận đấu mà tìm thấy những gì nó đang tìm kiếm nếu không thì nó đã không

chỉnh sửa 2:

OPTIONAL MATCH (u:User {id: {userId}}), (b:B {id: {bId}) 
with *,CASE when u is not null and b is not null then [1] else [] end as exists 
FOREACH (x in exists | CREATE (c:C), (c)-[:HAS_USER]->(u), (b)-[:SOME_REL]->(c)) 

RETURN u,b 

vì vậy bây giờ chúng tôi thực hiện một kết quả tùy chọn để nó không bị hỏng khi không tìm thấy. Sau đó, chúng tôi thực hiện một tuyên bố CASE và nơi cả người dùng và B tồn tại, chúng tôi tạo ra một số mối quan hệ. Và cuối cùng, chúng ta trả về User và b và kiểm tra xem cả hai có tồn tại hay không hoặc có một null trong bất kỳ trong số chúng hay không.

+0

Tôi không biết ý bạn là gì bởi truy vấn không thành công. Tôi nhận được một mảng trống từ 'Bolt' trong' results.records' mà với tôi là một truy vấn thành công không có kết quả. Thay vì một mảng trống Tôi muốn một số cách để biết nếu nó không thành công vì người dùng hoặc B không được tìm thấy –

+0

Thêm RETURN 'thành công' vào cuối và nếu không có kết quả trở lại nó thất bại và nếu bạn thành công nó tìm thấy và tạo mối quan hệ –

+0

Tôi cam đoan điều đó, nhưng tôi tò mò hơn về những gì gây ra sự thất bại. Nó giúp cho khách hàng biết những gì gây ra vấn đề. –

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