2012-07-06 17 views
17

Trong Cypher trong Neo4J, được cung cấp hai nút, nếu không có mối quan hệ giữa chúng, tôi muốn tạo một mối quan hệ (kiểu Foo) với một thuộc tính trọng số của một. Nếu mối quan hệ này đã tồn tại, tôi muốn tăng tài sản trọng lượng của nó.Trong Cypher, làm thế nào tôi có thể tạo mối quan hệ nếu nó không tồn tại; cập nhật thuộc tính nếu nó

Có cách nào tốt để thực hiện điều này trong một truy vấn Cypher duy nhất không? Cảm ơn!

Chỉnh sửa: Một số chi tiết bổ sung: Các nút đã được tạo, duy nhất và trong chỉ mục.

+0

Em không sao chứ với việc sử dụng một phiên bản SNAPSHOT của neo4j? Trong neo4j 1.8, bạn có thể cập nhật biểu đồ bằng cách sử dụng Cypher, nhưng không phải trong bất kỳ phiên bản nào khác. – Nicholas

+0

Có, tôi đang sử dụng SNAPSHOT. – Newtang

+0

Vì vậy, về cơ bản bạn đang tìm kiếm để quét tất cả các nút và nếu kết nối, tăng, nếu không, tạo mối quan hệ? – Nicholas

Trả lời

44

Đây chính xác là lý do chúng tôi thêm CREATE UNIQUE vào 1.8.

START a=node(...), b=node(...) 
CREATE UNIQUE a-[r:CONNECTED_TO]-b 
SET r.weight = coalesce(r.weight?, 0) + 1 

Đọc thêm về CREATE UNIQUEhere, câu hỏi đánh dấu here, và kết thành một khối here.

+0

Hoàn hảo! Chỉ cần những gì tôi đang tìm kiếm. Tôi biết về RELATE, nhưng không phải là cụm từ kết hợp. Chính xác thì "?" làm gì? – Newtang

+0

Đã chỉnh sửa câu trả lời để trỏ đến hướng dẫn sử dụng – Andres

+4

Vì Neo4j 2.0 là gì? toán tử đã bị xóa. Xem: http://neo4j.com/docs/snapshot/query-operators.html#query-operators-comparison –

10

Để hoàn thành Andres câu trả lời, dấu hỏi ở phần cuối của một tài sản hiện nay là một lỗi với Neo4j 2. Vì vậy, yêu cầu sẽ là:

MATCH a, b 
WHERE a(...) AND b(...) 
CREATE UNIQUE a-[r:CONNECTED_TO]->b 
SET r.weight = coalesce(r.weight, 0) + 1 
Các vấn đề liên quan