Neo4j - Lệnh hợp nhất

Lệnh MERGE là sự kết hợp của lệnh CREATE và lệnh MATCH.

Lệnh Neo4j CQL MERGE tìm kiếm một mẫu nhất định trong biểu đồ. Nếu nó tồn tại, thì nó trả về kết quả.

Nếu nó KHÔNG tồn tại trong đồ thị, thì nó sẽ tạo một nút / mối quan hệ mới và trả về kết quả.

Trong chương này, bạn sẽ học cách -

  • Hợp nhất một nút với nhãn
  • Hợp nhất một nút với các thuộc tính
  • OnCreate và OnMatch
  • Hợp nhất một mối quan hệ

Cú pháp

Sau đây là cú pháp của lệnh MERGE.

MERGE (node: label {properties . . . . . . . })

Trước khi tiếp tục với các ví dụ trong phần này, hãy tạo hai nút trong cơ sở dữ liệu với nhãn Dhawan và Ind. Tạo mối quan hệ kiểu “BATSMAN_OF” từ Dhawan đến Ind như hình dưới đây.

CREATE (Dhawan:player{name: "Shikar Dhawan", YOB: 1985, POB: "Delhi"}) 
CREATE (Ind:Country {name: "India"}) 
CREATE (Dhawan)-[r:BATSMAN_OF]->(Ind)

Hợp nhất một nút với một nhãn

Bạn có thể hợp nhất một nút trong cơ sở dữ liệu dựa trên nhãn bằng mệnh đề MERGE. Nếu bạn cố gắng hợp nhất một nút dựa trên nhãn, thì Neo4j xác minh xem có tồn tại bất kỳ nút nào với nhãn đã cho hay không. Nếu không, nút hiện tại sẽ được tạo.

Cú pháp

Sau đây là cú pháp để hợp nhất một nút dựa trên một nhãn.

MERGE (node:label) RETURN node

ví dụ 1

Sau đây là một Truy vấn Cypher mẫu hợp nhất một nút vào Neo4j (dựa trên nhãn). Khi bạn thực hiện truy vấn này, Neo4j xác minh xem có bất kỳ nút nào có nhãn khôngplayer. Nếu không, nó tạo một nút có tên “Jadeja” và trả về nó.

Nếu, tồn tại bất kỳ nút nào có nhãn đã cho, Neo4j trả về tất cả chúng.

MERGE (Jadeja:player) RETURN Jadeja

Để thực hiện truy vấn trên, hãy thực hiện các bước sau:

Step 1- Mở Ứng dụng máy tính để bàn Neo4j và khởi động Máy chủ Neo4j. Mở ứng dụng trình duyệt tích hợp sẵn của Neo4j bằng URLhttp://localhost:7474/ như thể hiện trong ảnh chụp màn hình sau.

Step 2 - Sao chép và dán truy vấn mong muốn trong dấu nhắc đô la và nhấn nút phát (để thực hiện truy vấn) được đánh dấu trong ảnh chụp màn hình sau.

Kết quả

Khi thực hiện, bạn sẽ nhận được kết quả sau. Vì bạn đã tạo một nút có tên “Dhawan” với nhãn “player” trong cơ sở dữ liệu, Neo4j trả về nó như thể hiện trong ảnh chụp màn hình sau.

Ví dụ 2

Bây giờ, hãy thử hợp nhất một nút có tên “CT2013” ​​với một nhãn có tên là Giải đấu. Vì không có nút nào có nhãn này, Neo4j tạo một nút với tên đã cho và trả về nó.

MERGE (CT2013:Tournament{name: "ICC Champions Trophy 2013"}) 
RETURN CT2013, labels(CT2013)

Để thực hiện truy vấn trên, hãy thực hiện các bước sau:

Step 1- Mở Ứng dụng máy tính để bàn Neo4j và Khởi động Máy chủ Neo4j. Mở ứng dụng trình duyệt tích hợp sẵn của Neo4j bằng URLhttp://localhost:7474/ như thể hiện trong ảnh chụp màn hình sau.

Step 2 - Sao chép và dán truy vấn mong muốn trong dấu nhắc đô la và nhấn nút phát (để thực hiện truy vấn) được đánh dấu trong ảnh chụp màn hình sau.

Kết quả

Khi thực hiện, bạn sẽ nhận được kết quả sau. Như đã thảo luận, vì không có nút nào có nhãn đã cho (Giải đấu). Neo4j tạo và trả về nút được chỉ định như thể hiện trong ảnh chụp màn hình sau.

Hợp nhất nút với thuộc tính

Bạn cũng có thể hợp nhất một nút với một tập hợp các thuộc tính. Nếu bạn làm như vậy, Neo4j sẽ tìm kiếm một kết quả trùng khớp cho nút được chỉ định, bao gồm các thuộc tính. Nếu không tìm thấy bất kỳ, nó sẽ tạo ra một.

Cú pháp

Sau đây là cú pháp để hợp nhất một nút bằng cách sử dụng thuộc tính.

MERGE (node:label {key1:value, key2:value, key3:value . . . . . . . . })

Thí dụ

Sau đây là một Truy vấn Cypher mẫu để hợp nhất một nút bằng cách sử dụng các thuộc tính. Truy vấn này cố gắng hợp nhất nút có tên “jadeja” bằng cách sử dụng thuộc tính và nhãn. Vì không có nút nào như vậy với nhãn và thuộc tính chính xác, Neo4j tạo một nút.

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
RETURN Jadeja

Để thực hiện truy vấn trên, hãy thực hiện các bước sau:

Step 1- Mở Ứng dụng máy tính để bàn Neo4j và Khởi động Máy chủ Neo4j. Mở ứng dụng trình duyệt tích hợp sẵn của Neo4j bằng URLhttp://localhost:7474/ như thể hiện trong ảnh chụp màn hình sau.

Step 2 - Sao chép và dán truy vấn mong muốn trong dấu nhắc đô la và nhấn nút phát (để thực hiện truy vấn) được đánh dấu trong ảnh chụp màn hình sau.

Kết quả

Khi thực hiện, bạn sẽ nhận được kết quả sau. Như đã thảo luận, vì không có nút nào có nhãn và thuộc tính được chỉ định, nó tạo ra một nút, như được hiển thị trong ảnh chụp màn hình sau.

OnCreate và OnMatch

Bất cứ khi nào, chúng tôi thực hiện một truy vấn hợp nhất, một nút được so khớp hoặc được tạo. Sử dụng khi tạo và khi khớp, bạn có thể đặt các thuộc tính cho biết nút được tạo hay khớp.

Cú pháp

Sau đây là cú pháp của OnCreateOnMatch điều khoản.

MERGE (node:label {properties . . . . . . . . . . .}) 
ON CREATE SET property.isCreated ="true" 
ON MATCH SET property.isFound ="true"

Thí dụ

Sau đây là một Truy vấn Cypher mẫu minh họa việc sử dụng OnCreateOnMatchmệnh đề trong Neo4j. Nếu nút được chỉ định đã tồn tại trong cơ sở dữ liệu, thì nút đó sẽ được so khớp và thuộc tính có cặp khóa-giá trị isFound = "true" sẽ được tạo trong nút.

Nếu nút được chỉ định không tồn tại trong cơ sở dữ liệu, thì nút đó sẽ được tạo và bên trong nó một thuộc tính có cặp khóa-giá trị isCreate = "true" sẽ được tạo.

MERGE (Jadeja:player {name: "Ravindra Jadeja", YOB: 1988, POB: "NavagamGhed"}) 
ON CREATE SET Jadeja.isCreated = "true" 
ON MATCH SET Jadeja.isFound = "true" 
RETURN Jadeja

Để thực hiện truy vấn trên, hãy thực hiện các bước sau:

Step 1- Mở Ứng dụng máy tính để bàn Neo4j và khởi động Máy chủ Neo4j. Mở ứng dụng trình duyệt tích hợp sẵn của Neo4j bằng URLhttp://localhost:7474/ như thể hiện trong ảnh chụp màn hình sau.

Step 2 - Sao chép và dán truy vấn mong muốn trong dấu nhắc đô la và nhấn nút phát (để thực hiện truy vấn) được đánh dấu trong ảnh chụp màn hình sau.

Kết quả

Khi thực hiện, bạn sẽ nhận được kết quả sau. Như đã thảo luận, vì không có nút nào với các chi tiết được chỉ định, Neo4j đã tạo nó cùng với thuộc tínhisFound như thể hiện trong ảnh chụp màn hình sau.

Hợp nhất một mối quan hệ

Cũng giống như các nút, bạn cũng có thể hợp nhất các mối quan hệ bằng cách sử dụng mệnh đề MERGE.

Thí dụ

Sau đây là một Truy vấn Cypher mẫu hợp nhất một mối quan hệ bằng cách sử dụng mệnh đề MATCH trong Neo4j. Truy vấn này cố gắng hợp nhất một mối quan hệ có tênWINNERS_OF giữa các nút “ind” (nhãn: Quốc gia và tên: Ấn Độ) và ICC13 (nhãn: Giải đấu & tên: ICC Champions Trophy 2013).

Vì mối quan hệ như vậy không tồn tại, Neo4j tạo ra một mối quan hệ.

MATCH (a:Country), (b:Tournament) 
   WHERE a.name = "India" AND b.name = "ICC Champions Trophy 2013" 
   MERGE (a)-[r:WINNERS_OF]->(b) 
RETURN a, b

Để thực hiện truy vấn trên, hãy thực hiện các bước sau:

Step 1- Mở Ứng dụng máy tính để bàn Neo4j và khởi động Máy chủ Neo4j. Mở ứng dụng trình duyệt tích hợp sẵn của Neo4j bằng URLhttp://localhost:7474/ như thể hiện trong ảnh chụp màn hình sau.

Step 2 - Sao chép và dán truy vấn mong muốn trong dấu nhắc đô la và nhấn nút phát (để thực hiện truy vấn) được đánh dấu trong ảnh chụp màn hình sau.

Kết quả

Khi thực hiện, bạn sẽ nhận được kết quả sau. Vì mối quan hệ được chỉ định không tồn tại trong cơ sở dữ liệu, Neo4j tạo một mối quan hệ như được hiển thị trong ảnh chụp màn hình sau.

Theo cách tương tự, bạn cũng có thể hợp nhất nhiều mối quan hệ và cả mối quan hệ vô hướng.