Neo4j:圖數據庫GraphDB(一)入門和基本查詢語句


圖數據庫的代表:Neo4j    官網:  http://neo4j.com/

引言:為什么使用圖數據庫

  在很多新型項目中,應用圖數據庫已經是勢在必行的趨勢了,因為圖數據庫可以很好的表示各種節點與關系的概念,並且可以很友好的可視化出來,大大方便了我們的數據管理和展示工作。

 

下面均以演員,導演和電影的圖關系做介紹:

一 概念

節點:

(a) //actors
(m) //movies
( ) //some anonymous nod

關系:

-[r]-> //a relationship referred to as "r"
(a)-[r]->(m) //actors having a relationship referred to as "r" to movies
-[:ACTED_IN]-> //the relationship type is ACTED_IN
(a)-[:ACTED_IN]->(m) //actors that ACTED_IN some movie
(d)-[:DIRECTED]->(m) //directors that DIRECTED some movie

屬性:

(m {title:"The Matrix"}) //Movie with a title property
(a {name:"Keanu Reeves",born:1964}) //Actor with name and born property
(a)-[:ACTED_IN {roles:["Neo"]}]->(m) //Relationship ACTED_IN with roles property (an array of character names)

標簽:

(a:Person) //a Person
(a:Person {name:"Keanu Reeves"}) //a Person with properties
(a:Person)-[:ACTED_IN]->(m:Movie) //a Person that ACTED_IN some movie

 

二 CQL查詢語句-MATCH

運行環境為在線瀏覽器-數據庫是官方演員-電影圖數據庫

1查詢所有節點

MATCH (n)
RETURN n;

 

查詢兩個節點,一條邊:

MATCH (n)-->(m) 
RETURN n, m;

也可缺失一個節點

MATCH (n)-->( )
RETURN n;

返回節點的屬性值:返回演員和導演的名字

MATCH (person)-->()
RETURN person.name;

2查詢關系-邊

查詢所有的邊關系:

MATCH (person)-[rel]->(movie)
RETURN person, type(rel)

查詢哪個演員演了哪個電影:

MATCH (actor)-[role:ACTED_IN]->(movie)
RETURN actor.name, role.roles, movie.title;

3 查詢標簽:

用標簽查詢 哪個演員表演過哪個電影:

MATCH (actor:Person)-[:ACTED_IN]->(movie)
RETURN actor.name, movie.title;

增加WHERE 條件篩選,名字叫Tom Hanks的演員:

MATCH (tom:Person)
WHERE tom.name = "Tom Hanks"
RETURN tom;

還可以這樣:

MATCH (tom:Person {name:"Tom Hanks"})
RETURN tom;

 

4 path:傳遞關系

查詢哪個演員參演的電影,及這部電影的導演關系圖:

MATCH (actor)-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)
RETURN actor.name, movie.title, director.name;

上面語句的另一種寫法:

 MATCH (actor)-[:ACTED_IN]->(movie), 
       (movie)<-[:DIRECTED]-(director) RETURN actor.name, movie.title, director.name;

再來一種等價寫法:

 MATCH (actor)-[:ACTED_IN]->(movie),
       (director)-[:DIRECTED]->(movie) RETURN actor.name, movie.title, director.name;

定義path

用p返回多有的path及其屬性:

MATCH p=(a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d)
 RETURN p;

用節點node返回path:

 MATCH p=(a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d)
 RETURN nodes(p);

用關系rels返回path:

MATCH p=(a)-[:ACTED_IN]->(m)<-[:DIRECTED]-(d)
 RETURN rels(p);

兩個模式的path定義:

 MATCH p1=(a)-[:ACTED_IN]->(m), p2=(d)-[:DIRECTED]->(m)
 RETURN p1, p2;

 

 

 

 

通過以上的介紹,是不是你也發現了圖數據庫的潛力無窮的,只要用到需要的項目,Neo4j很好用。希望可以關注后續的高級介紹。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM