Neo4j 綜合練習作業

Neo4j 綜合練習作業

作業說明

這個作業涵蓋了 Neo4j 的多個重要知識點,包括節點和關系的創建、查詢、更新、刪除以及高級查詢功能。請使用 Cypher 語句完成以下所有題目。

數據準備

首先執行以下語句創建示例數據:
ACTED_IN: 表示出演關系
DIRECTED: 表示導演關系
PRODUCED: 制片關系
FRIENDS_WITH: 朋友關系

// 創建人物節點
CREATE 
(keanu:Person {name: 'Keanu Reeves', born: 1964, nationality: 'Canadian'}),
(laurence:Person {name: 'Laurence Fishburne', born: 1961, nationality: 'American'}),
(carrie:Person {name: 'Carrie-Anne Moss', born: 1967, nationality: 'Canadian'}),
(lana:Person {name: 'Lana Wachowski', born: 1965, nationality: 'American'}),
(lilly:Person {name: 'Lilly Wachowski', born: 1967, nationality: 'American'}),
(joel:Person {name: 'Joel Silver', born: 1952, nationality: 'American'}),
(hugo:Person {name: 'Hugo Weaving', born: 1960, nationality: 'Australian'}),
(emil:Person {name: 'Emil Eifrem', born: 1978, nationality: 'Swedish'}),// 創建電影節點
(matrix:Movie {title: 'The Matrix', released: 1999, tagline: 'Welcome to the Real World'}),
(matrix2:Movie {title: 'The Matrix Reloaded', released: 2003, tagline: 'Free your mind'}),
(matrix3:Movie {title: 'The Matrix Revolutions', released: 2003, tagline: 'Everything that has a beginning has an end'}),
(devils:Movie {title: 'The Devils Advocate', released: 1997, tagline: 'Evil has its winning ways'}),
(few:Movie {title: 'A Few Good Men', released: 1992, tagline: 'In the heart of the nation\'s capital, in a courthouse of the U.S. government, one man will stop at nothing to keep his honor, and one will stop at nothing to find the truth.'}),// 創建關系
(keanu)-[:ACTED_IN {roles: ['Neo']}]->(matrix),
(keanu)-[:ACTED_IN {roles: ['Neo']}]->(matrix2),
(keanu)-[:ACTED_IN {roles: ['Neo']}]->(matrix3),
(keanu)-[:ACTED_IN {roles: ['Kevin Lomax']}]->(devils),
(laurence)-[:ACTED_IN {roles: ['Morpheus']}]->(matrix),
(laurence)-[:ACTED_IN {roles: ['Morpheus']}]->(matrix2),
(laurence)-[:ACTED_IN {roles: ['Morpheus']}]->(matrix3),
(carrie)-[:ACTED_IN {roles: ['Trinity']}]->(matrix),
(carrie)-[:ACTED_IN {roles: ['Trinity']}]->(matrix2),
(carrie)-[:ACTED_IN {roles: ['Trinity']}]->(matrix3),
(hugo)-[:ACTED_IN {roles: ['Agent Smith']}]->(matrix),
(hugo)-[:ACTED_IN {roles: ['Agent Smith']}]->(matrix2),
(hugo)-[:ACTED_IN {roles: ['Agent Smith']}]->(matrix3),
(emil)-[:ACTED_IN {roles: ['Emil']}]->(matrix),
(lana)-[:DIRECTED]->(matrix),
(lana)-[:DIRECTED]->(matrix2),
(lana)-[:DIRECTED]->(matrix3),
(lilly)-[:DIRECTED]->(matrix),
(lilly)-[:DIRECTED]->(matrix2),
(lilly)-[:DIRECTED]->(matrix3),
(joel)-[:PRODUCED]->(matrix),
(joel)-[:PRODUCED]->(matrix2),
(joel)-[:PRODUCED]->(matrix3),// 創建一些朋友關系
(keanu)-[:FRIENDS_WITH]->(emil),
(keanu)-[:FRIENDS_WITH]->(carrie),
(carrie)-[:FRIENDS_WITH]->(laurence),
(emil)-[:FRIENDS_WITH]->(joel);

作業題目

基礎查詢

  1. 查詢所有Person節點,只返回name屬性
  2. 查詢所有Movie節點,返回title和released屬性
  3. 查詢出演過"The Matrix"電影的所有演員的姓名
  4. 查詢Keanu Reeves出演過的所有電影的標題

條件查詢

  1. 查詢1990年到2000年之間發布的電影
  2. 查詢國籍不是"American"的演員
  3. 查詢出演過至少2部電影的演員
  4. 查詢既出演過電影又擔任過導演的人

關系查詢

  1. 查詢Keanu Reeves的朋友(直接朋友,不包括朋友的朋友)
  2. 查詢與Keanu Reeves有2跳關系的所有人(朋友的朋友)
  3. 查詢與"The Matrix"電影相關的所有人(包括演員、導演、制片人)
  4. 查詢共同出演過電影的演員對

聚合與排序

  1. 統計每部電影的演員數量,并按數量降序排列
  2. 查詢每個演員出演的電影數量,并按數量降序排列
  3. 查詢最年輕的5位演員

更新操作

  1. 為Keanu Reeves添加一個新的屬性"gender",值為"male"
  2. 將"The Matrix"電影的tagline更新為"The one that started it all"
  3. 刪除Emil Eifrem和Joel Silver之間的朋友關系
  4. 為電影"A Few Good Men"添加一個導演節點Rob Reiner(生于1947年,國籍American),并建立導演關系

路徑查詢

  1. 查找Keanu Reeves到Hugo Weaving的最短路徑(任何關系都可以)

高級查詢

  1. 使用OPTIONAL MATCH查詢所有電影及其導演(如果有的話)
  2. 使用UNION查詢所有加拿大籍的演員和美國籍的導演
  3. 使用CASE表達式為演員分類:出生在1960年前的為"Senior",1960-1970年的為"Middle-aged",1970年后的為"Young"
  4. 使用WITH和LIMIT查詢出演電影最多的前3位演員

索引與約束

  1. 為Person節點的name屬性創建唯一約束
  2. 為Movie節點的title屬性創建索引

刪除操作

  1. 刪除電影"A Few Good Men"及其所有關系
  2. 刪除所有沒有出演任何電影的人員

作業答案

// 1. 查詢所有Person節點,只返回name屬性
MATCH (p:Person) RETURN p.name;// 2. 查詢所有Movie節點,返回title和released屬性
MATCH (m:Movie) RETURN m.title, m.released;// 3. 查詢出演過"The Matrix"電影的所有演員的姓名
MATCH (p:Person)-[:ACTED_IN]->(m:Movie {title: 'The Matrix'}) RETURN p.name;// 4. 查詢Keanu Reeves出演過的所有電影的標題
MATCH (p:Person {name: 'Keanu Reeves'})-[:ACTED_IN]->(m:Movie) RETURN m.title;// 5. 查詢1990年到2000年之間發布的電影
MATCH (m:Movie) WHERE m.released >= 1990 AND m.released <= 2000 RETURN m;// 6. 查詢國籍不是"American"的演員
MATCH (p:Person) WHERE p.nationality <> 'American' RETURN p.name;// 7. 查詢出演過至少2部電影的演員
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) 
WITH p, count(m) AS movieCount 
WHERE movieCount >= 2 
RETURN p.name, movieCount;// 8. 查詢既出演過電影又擔任過導演的人
MATCH (p:Person)-[:ACTED_IN]->(:Movie), (p)-[:DIRECTED]->(:Movie) 
RETURN DISTINCT p.name;// 9. 查詢Keanu Reeves的朋友
MATCH (p:Person {name: 'Keanu Reeves'})-[:FRIENDS_WITH]->(friend) 
RETURN friend.name;// 10. 查詢與Keanu Reeves有2跳關系的所有人
MATCH (p:Person {name: 'Keanu Reeves'})-[:FRIENDS_WITH*2]->(friendOfFriend) 
RETURN DISTINCT friendOfFriend.name;// 11. 查詢與"The Matrix"電影相關的所有人
MATCH (p:Person)-[r]->(m:Movie {title: 'The Matrix'}) 
RETURN p.name, type(r) AS role;// 12. 查詢共同出演過電影的演員對
MATCH (p1:Person)-[:ACTED_IN]->(m:Movie)<-[:ACTED_IN]-(p2:Person) 
WHERE p1 <> p2 
RETURN p1.name, p2.name, m.title;// 13. 統計每部電影的演員數量
MATCH (m:Movie)<-[:ACTED_IN]-(p:Person) 
RETURN m.title, count(p) AS actorCount 
ORDER BY actorCount DESC;// 14. 查詢每個演員出演的電影數量
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) 
RETURN p.name, count(m) AS movieCount 
ORDER BY movieCount DESC;// 15. 查詢最年輕的5位演員
MATCH (p:Person) 
RETURN p.name, p.born 
ORDER BY p.born DESC 
LIMIT 5;// 16. 為Keanu Reeves添加gender屬性
MATCH (p:Person {name: 'Keanu Reeves'}) 
SET p.gender = 'male' 
RETURN p;// 17. 更新"The Matrix"的tagline
MATCH (m:Movie {title: 'The Matrix'}) 
SET m.tagline = 'The one that started it all' 
RETURN m;// 18. 刪除Emil Eifrem和Joel Silver之間的朋友關系
MATCH (e:Person {name: 'Emil Eifrem'})-[r:FRIENDS_WITH]->(j:Person {name: 'Joel Silver'}) 
DELETE r;// 19. 為"A Few Good Men"添加導演
CREATE (rob:Person {name: 'Rob Reiner', born: 1947, nationality: 'American'});
MATCH (m:Movie {title: 'A Few Good Men'}), (p:Person {name: 'Rob Reiner'}) 
CREATE (p)-[:DIRECTED]->(m);// 20. 查找Keanu Reeves到Hugo Weaving的最短路徑
MATCH path = shortestPath((k:Person {name: 'Keanu Reeves'})-[*]-(h:Person {name: 'Hugo Weaving'})) 
RETURN path;// 21. 使用OPTIONAL MATCH查詢所有電影及其導演
MATCH (m:Movie) 
OPTIONAL MATCH (d:Person)-[:DIRECTED]->(m) 
RETURN m.title, d.name AS director;// 22. 使用UNION查詢所有加拿大籍的演員和美國籍的導演
MATCH (p:Person {nationality: 'Canadian'})-[:ACTED_IN]->(:Movie) 
RETURN p.name AS name, 'Actor' AS role
UNION
MATCH (p:Person {nationality: 'American'})-[:DIRECTED]->(:Movie) 
RETURN p.name AS name, 'Director' AS role;// 23. 使用CASE表達式為演員分類
MATCH (p:Person) 
RETURN p.name, 
CASE WHEN p.born < 1960 THEN 'Senior'WHEN p.born >= 1960 AND p.born < 1970 THEN 'Middle-aged'ELSE 'Young'
END AS ageGroup;// 24. 使用WITH和LIMIT查詢出演電影最多的前3位演員
MATCH (p:Person)-[:ACTED_IN]->(m:Movie) 
WITH p, count(m) AS movieCount 
ORDER BY movieCount DESC 
LIMIT 3 
RETURN p.name, movieCount;// 25. 為Person節點的name屬性創建唯一約束
CREATE CONSTRAINT unique_person_name FOR (p:Person) REQUIRE p.name IS UNIQUE;// 26. 為Movie節點的title屬性創建索引
CREATE INDEX movie_title_index FOR (m:Movie) ON (m.title);// 27. 刪除電影"A Few Good Men"及其所有關系
MATCH (m:Movie {title: 'A Few Good Men'}) 
DETACH DELETE m;// 28. 刪除所有沒有出演任何電影的人員
MATCH (p:Person) 
WHERE NOT (p)-[:ACTED_IN]->() 
DELETE p;

這個作業涵蓋了 Neo4j 和 Cypher 的大部分核心功能,包括 CRUD 操作、各種查詢模式、路徑查找、聚合函數、索引和約束等。完成這個作業后,你應該對 Neo4j 的使用有了全面的了解。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/90445.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/90445.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/90445.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于PA算法的FTL引導

一、抽象綁定關系 1. 什么是 AF Block,什么是 NF Block,為什么要將多個 NF Block 綁定為一個 AF Block AF Block(Allocation Flash Block) 和 NF Block(NAND Flash Block) 是在 NAND Flash 存儲架構中用于管理數據的基本單位。 AF Block 定義:AF Block 是一組多個 NF…

快速入門Java中的IO操作

以下是 Java 中常用的 IO 知識點總結&#xff1a; 1. 流的分類 按數據流向&#xff1a;輸入流&#xff08;讀取數據&#xff09;和輸出流&#xff08;寫入數據&#xff09;。按數據類型&#xff1a;字節流&#xff08;處理二進制數據&#xff0c;以字節為單位&#xff09;和字符…

小程序軟裝: 組件庫開發

本節概述 經過前面小節的學習&#xff0c;我們已經搭建起了小程序的編譯構建環境&#xff0c;能夠將我們開發的小程序項目編譯成為對應的邏輯代碼文件 logic.js&#xff0c;頁面渲染文件 view.js&#xff0c;樣式文件 style.css 和配置文件 config.json 在編譯小程序的過程中…

250708-Debian系統安裝Edge瀏覽器并配置最小中文輸入法

在 Debian 系統上安裝 Microsoft Edge 瀏覽器可以通過以下幾種方式進行。Microsoft 官方提供了 .deb 安裝包&#xff0c;適用于 Debian、Ubuntu 及其衍生系統。 A. 如何安裝&#xff1f; ? 方法一&#xff1a;使用 .deb 安裝包&#xff08;推薦&#xff09; 步驟 1&#xff…

docker所占硬盤內存指令

使用下面命令可以查看docker所占的硬盤大小&#xff0c;如&#xff1a;docker system dfdocker system df -v

A1126LLHLX-T Allegro霍爾效應鎖存器,5kHz+推挽輸出,汽車級轉速檢測專家!

A1126LLHLX-T&#xff08;Allegro&#xff09;產品解析一、產品定位A1126LLHLX-T是Allegro MicroSystems推出的全極性霍爾效應鎖存器&#xff0c;采用超薄SOT-23W封裝&#xff08;1mm厚度&#xff09;&#xff0c;專為高可靠性位置檢測與轉速測量設計&#xff0c;具有低功耗、高…

【C#】File從后往前讀取文件指定行數

/// <summary>/// 從后往前讀取文件最后行數據/// </summary>/// <param name"filePath"></param>/// <param name"count"></param>/// <returns></returns>public static List<string> ReadFileRe…

暑假算法日記第五天

目標?&#xff1a;刷完靈神專題訓練算法題單 階段目標&#x1f4cc;&#xff1a;【算法題單】滑動窗口與雙指針 LeetCode題目:683. K 個關閉的燈泡2067. 等計數子串的數量2524. 子數組的最大頻率分數2269. 找到一個數字的 K 美麗值1984. 學生分數的最小差值1461. 檢查一個字符…

【05】MFC入門到精通——MFC 為對話框中的控件添加變量 和 數據交換和檢驗

文章目錄四、 為對話框中的控件添加變量五、對話框類的5.1 為編輯框添加變量面步驟中 為對話框添加了幾個控件&#xff0c;包括三個靜態文本框&#xff0c;三個編輯框&#xff0c;一個按鈕控件。 四、 為對話框中的控件添加變量 編輯框中的數據可能會經常變化&#xff0c;有必…

4-Kafka-partition(分區)概念

Kafka Topic 分區詳解 &#x1f4cc; 一、分區核心概念 1. 什么是分區&#xff1f; 物理分片&#xff1a;Topic 被劃分為多個分區&#xff08;Partition&#xff09;&#xff0c;每個分區是一個有序、不可變的消息序列存儲單位&#xff1a;每個分區對應一個物理日志文件&…

論文略讀:UniPELT: A Unified Framework for Parameter-Efficient Language Model Tuning

ACL 2021 LoRAPrefix TuningAdapter門控藍色參數是可訓練的參數

【論文閱讀】CogView: Mastering Text-to-Image Generation via Transformers

CogView&#xff1a;通過Transformers實現文本到圖像的生成簡介目標&#xff1a;通用領域中的文本到圖像生成一直是一個開放的問題&#xff0c;它既需要強大的生成模型&#xff0c;也需要跨模態的理解。為了解決這個問題&#xff0c;我們提出了CogView&#xff0c;一個具有VQ -…

Typecho與WordPress技術架構深度對比:從LAMP到輕量級設計

文章目錄 Typecho vs WordPress:深入比較兩大博客系統的優劣與選型指南引言1. 系統概述與技術架構1.1 WordPress架構分析1.2 Typecho架構特點2. 核心功能對比2.1 內容管理能力2.2 主題與模板系統3. 性能與擴展性對比3.1 系統性能基準測試3.2 擴展生態系統4. 安全性與維護成本4…

CSS揭秘:8.連續的圖像邊框

前置知識&#xff1a;CSS 漸變&#xff0c;5. 條紋背景&#xff0c;border-image&#xff0c;基本的 CSS 動畫前言 本文旨在實現圖片邊框效果&#xff0c;即在特定場景下讓圖片顯示在邊框而非背景區域。 一、傳統實現方案 正常我們面對這樣一個需求時&#xff0c;下意識會想到的…

Linux驅動學習day20(pinctrl子系統驅動大全)

一、Pinctrl作用Pinctrl(Pin Controller)&#xff1a;控制引腳引腳的枚舉與命名、引腳復用、引腳配置。Pinctrl驅動一般由芯片原廠的BSP工程師來寫&#xff0c;一般驅動工程師只需要在設備樹中指明使用哪個引腳&#xff0c;復用為哪個功能、配置為哪些狀態。二、Pin Controller…

Debiased All-in-one Image Restoration with Task Uncertainty Regularization

Abstract 一體化圖像恢復是一項基礎的底層視覺任務&#xff0c;在現實世界中有重要應用。主要挑戰在于在單個模型中處理多種退化情況。雖然當前方法主要利用任務先驗信息來指導恢復模型&#xff0c;但它們通常采用統一的多任務學習&#xff0c;忽略了不同退化任務在模型優化中的…

逆向 qq 音樂 sign,data, 解密 response 返回的 arraybuffer

解密 arraybuffer python requests 請求得到 arraybuffer&#xff0c;轉為 hex 傳遞給 js res_data sign ctx.call("decrypt", response.content.hex())function decrypt(hex) {const bytes new Uint8Array(hex.length / 2);for (let i 0; i < hex.length; i …

PPT處理控件Aspose.Slides教程:在 C# 中將 ODP 轉換為 PPTX

您是否正在尋找可靠的 PowerPoint SDK 來以編程方式開發ODP到PPTX轉換器&#xff1f;本篇博文演示了如何使用 C# 將 ODP 轉換為 PPTX。ODP是一種基于 XML 的演示文稿文件&#xff0c;可能包含圖像、視頻、文本等。但是&#xff0c;將打開的文檔演示文稿轉換為 PowerPoint 格式可…

[746] 使用最小花費爬樓梯

可以從下標0或者1作為起始位置————dp[0] dp[1] 0。一次性可以選擇移動1次或者2次&#xff0c;故當下標>2的時候&#xff0c;到達2有可能是從下標0開始或者下標1開始&#xff0c;cost[0] or cost[1]&#xff1b;到達n&#xff0c;有可能是花費cost[n-1]到達&#xff0c…

樹莓派vsftpd文件傳輸服務器的配置方法

在樹莓派上安裝和配置 vsftpd&#xff08;Very Secure FTP Daemon&#xff09;服務器的步驟如下&#xff1a; 1. 安裝 vsftpd 打開終端&#xff0c;執行以下命令安裝 vsftpd&#xff1a; sudo apt update sudo apt install vsftpd安裝完成后&#xff0c;vsftpd 會自動啟動。可以…