Cypher模式匹配怎樣處理多對(duì)多關(guān)系

小樊
83
2024-10-31 21:28:32

在Neo4j中,Cypher是一種用于查詢圖形數(shù)據(jù)庫(kù)的語(yǔ)言。處理多對(duì)多關(guān)系時(shí),我們需要使用WITH子句、MATCH子句和CREATE子句等。假設(shè)我們有兩個(gè)節(jié)點(diǎn)類型:PersonCourse,它們之間存在多對(duì)多關(guān)系,表示一個(gè)人可以參加多個(gè)課程,一個(gè)課程可以被多個(gè)人參加。我們有一個(gè)名為Person_Course的關(guān)聯(lián)節(jié)點(diǎn),它有兩個(gè)屬性:start_dateend_date,分別表示開(kāi)始和結(jié)束日期。

以下是一個(gè)使用Cypher處理多對(duì)多關(guān)系的示例:

  1. 首先,創(chuàng)建節(jié)點(diǎn)和關(guān)系:
CREATE (p1:Person {name: "Alice", age: 30})
CREATE (p2:Person {name: "Bob", age: 25})
CREATE (c1:Course {title: "Math", duration: 100})
CREATE (c2:Course {title: "Physics", duration: 120})
CREATE (p1)-[:ENROLLED_IN {start_date: 2021-09-01, end_date: 2021-12-01}]->(c1)
CREATE (p1)-[:ENROLLED_IN {start_date: 2021-09-01, end_date: 2021-12-01}]->(c2)
CREATE (p2)-[:ENROLLED_IN {start_date: 2021-09-01, end_date: 2021-12-01}]->(c1)
  1. 查詢某個(gè)學(xué)生參加的課程:
MATCH (p:Person {name: "Alice"})-[:ENROLLED_IN]-(c:Course)
RETURN p, c
  1. 查詢參加了某個(gè)課程的所有學(xué)生:
MATCH (c:Course {title: "Math"})-[:ENROLLED_IN]-(p:Person)
RETURN c, p
  1. 添加一個(gè)新的學(xué)生和一個(gè)新的課程,并將它們關(guān)聯(lián)起來(lái):
MATCH (p:Person {name: "Charlie", age: 22})
MATCH (c:Course {title: "Chemistry", duration: 90})
CREATE (p)-[:ENROLLED_IN {start_date: 2021-09-01, end_date: 2021-12-01}]->(c)
  1. 更新一個(gè)學(xué)生的課程信息:
MATCH (p:Person {name: "Alice"})-[:ENROLLED_IN]-(c:Course {title: "Math"})
SET c.duration = 110
RETURN p, c
  1. 刪除一個(gè)學(xué)生和一個(gè)課程之間的關(guān)系:
MATCH (p:Person {name: "Alice"})-[:ENROLLED_IN]-(c:Course {title: "Physics"})
DETACH DELETE p, c

這些示例展示了如何使用Cypher處理多對(duì)多關(guān)系。你可以根據(jù)自己的需求修改這些查詢,以滿足特定的業(yè)務(wù)場(chǎng)景。

0