圖數據庫的代表: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很好用。希望可以關注后續的高級介紹。
