neo4j本人常用CQL語句


neo4j常用CQL語句:

 


查看某節點相關的所有關系

MATCH (n:BussinessObj {name:"凍結" } ) -[r]->(z) RETURN n,z
MATCH (b:BussinessObj)-[r]-() RETURN b,r


刪除節點,以及與之相關的所有關系
MATCH (b:BussinessObj)-[r]-() DELETE b,r

 

一些不存在關系的節點沒有刪除掉還得再用語句:
MATCH (b:BussinessObj) DELETE b

 

刪除某類節點的某個關系
假設要刪除BussinessObj類節點的某個關系,但是你忘記具體的關系名是什么了,所以應該查看BussinessObj類存在哪些關系,關系名是什么。具體語句:MATCH (n:BussinessObj)-[r]-() RETURN r,type(r)

 

然后再指定要刪除的具體的關系名,假如我要刪除BussinessObj類的companyTagIs關系。語句:MATCH (n:BussinessObj)-[r:companyTagIs]-() DELETE r 具有刪除某一個關系。注意,如果DELETE時將n也放在其后,會出問題,因為n即BussinessObj還存在其他關系,在你還沒有刪除掉BussinessObj的所有關系之前,是不能正確刪除節點的。

 

 

刪除節點及關系
MATCH (n)-[r]-()
DELETE n,r
上面的方式會將node和relations都刪除,但這種刪除方式仍會有一些信息未清空(如Property keys),徹底刪除數據庫使用如下方式:

systemctl stop neo4j

rm -rf /var/lib/neo4j/data/databases/graph.db


systemctl start neo4j


————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
導入節點:
1. 先將BussinessObj.csv放入 /var/lib/neo4j/import目錄,若有中文先轉成UTF-8格式name coreFlag description
如果是liunx系統必須加入file:/作為前綴,windows系統加入LOAD CSV FROM "file://c:/location/local/my.csv"

LOAD CSV WITH HEADERS FROM "file:/BussinessObj.csv" AS line
MERGE (b:BussinessObj{name:line.name,coreFlag:line.coreFlag,description:line.description})


LOAD CSV WITH HEADERS FROM "file:/BussinessObj1_2.csv" AS line
MERGE (b:BussinessObj{name:line.name,coreFlag:line.coreFlag,description:line.description})


————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 

 

 

 

創建對象節點:
{
"name": "凍結11",
"description": "經濟業務處理前進行賬戶余額預先凍結1269",
"coreFlag": "Y858"
}

創建同類型的節點間關系

 

==============================================================
下一類型關系 nextNode

==============================================================
match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='訂單支付' and n2.name='清分'
return n1,n2 ;

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='訂單支付' and n2.name='清分'
create (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t;

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='清分' and n2.name='日結算'
create (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t;

 

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='清分' and n2.name='賬務'
create (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t;


match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='賬務' and n2.name='會計'
create (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t;

 

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='日結算' and n2.name='賬務'
create (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t;

 


match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='訂單取消' and n2.name='清分'
create (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t;

 


供應商罰款資金流
match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='供應商罰款' and n2.name='凍結'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='供應商罰款' and n2.name='保證金'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='凍結' and n2.name='轉賬'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='凍結' and n2.name='保證金'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='轉賬' and n2.name='解凍'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='轉賬' and n2.name='賬務'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['轉賬'] and n2.name='保證金'
create (n1)-[t:nextNode{name:'所屬類型'}]->(n2)
return n1,n2,t

 

 


平台提現資金流
match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='平台提現' and n2.name='凍結'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

 

 

供應商提現資金流
match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='供應商提現' and n2.name='凍結'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='供應商提現' and n2.name='保證金'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t


售后資金流
match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='售后' and n2.name='凍結'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name ='售后' and n2.name='保證金'
MERGE (n1)-[t:nextNode{name:'下一節點'}]->(n2)
return n1,n2,t

 

 


==============================================================
從屬類型關系 BelongToRelation

==============================================================
match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['賬戶','賬戶余額','賬務流水'] and n2.name='賬務'
create (n1)-[t:BelongToRelation{name:'所屬類型'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['賬戶余額'] and n2.name='賬戶'
create (n1)-[t:BelongToRelation{name:'所屬類型'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['保證金'] and n2.name='賬戶'
create (n1)-[t:BelongToRelation{name:'所屬類型'}]->(n2)
return n1,n2,t

 

 

match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['凍結','解凍'] and n2.name='賬戶余額'
create (n1)-[t:BelongToRelation{name:'所屬類型'}]->(n2)
return n1,n2,t

match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['划付','渠道代付'] and n2.name='出金'
create (n1)-[t:BelongToRelation{name:'所屬類型'}]->(n2)
return n1,n2,t

 

match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['會計賬戶','會計科目','會計分錄','記賬場景'] and n2.name='會計'
MERGE (n1)-[t:BelongToRelation{name:'所屬類型'}]->(n2)
return n1,n2,t

 


match (n1:BussinessObj),(n2:BussinessObj) where n1.name='凍結' and n2.name='凍結類'
create (n1)-[t:BelongToRelation{name:'所屬類型'}]->(n2)
return n1,n2,t

 

match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['凍結7','凍結100'] and n2.name='凍結類'
return n1,n2

match (n1:BussinessObj),(n2:BussinessObj) where n1.name in ['凍結7','凍結100'] and n2.name='凍結類'
create (n1)-[t:BelongToRelation{name:'所屬類型'}]->(n2)
return n1,n2,t

 

Cypher
:help 幫助頁面
:schema 查看數據庫結構
:schema ls -l :Person

:server change-password // 修改密碼
CALL dbms.changePassword("newpassword") // (舊版本)修改密碼

:server connect 連接

:play sysinfo 查看系統信息

// List node labels 查詢所有的label
CALL db.labels()

// List relationship types 查詢所有的type
CALL db.relationshipTypes()

// What is related, and how 查詢數據里的節點和關系 類似於 SQL的desc
CALL db.schema()

// List functions
CALL dbms.functions()

// List procedures
CALL dbms.procedures()

CALL dbms.listQueries() ;

CALL dbms.killQuery(queryId);

// 查詢一共有多少節點
// Count all nodes
match (n) RETURN count(n)

// 查詢一共有多少關系 // 不帶方向的話結果是2倍
// Count all relationships
match ()-->() RETURN count(*);
match ()-[r]->() return count(r);

 

// 查詢某節點一共有多少關系 // 不帶方向的話結果是2倍
match (n:XXX {name:'賬務流水'})-[r]->() return count(r);


//同一標簽下的兩個節點建立關系
match (a:Person), (b:Person) where a.name = 'zhangsan' and b.name = 'lisi'
merge (a)-[r:RELTYPE]->(b) return r

// 模糊匹配
match (n:Person) where n.name =~ '張.*' return n

// 包含
match (n:Person) where n.name contains '張' return n;

// 去重
match (n:Person) with n.name as name return distinct name;

// Count all nodes 查詢一共有多少節點
match (n) RETURN count(n)

// Count all relationships 查詢一共有多少關系
match ()-->() RETURN count(*);


// 查詢一共有多少種節點
call db.labels();
match (n) return distinct label(n);


// 查詢一共有多少關系
call db.relationshipTypes()

// 查詢數據庫里的所有屬性
match (n) unwind keys(n) as allkeys return distinct allkeys;
// 查詢關系最多的節點
// 實際使用時,最好對n加個范圍,要不然 全圖掃描
// 使用with 和 別名,能減少一次count(*)的查詢
match (n:BussinessObj)--() with n.name as name, count(*) as count return name, count order by count desc limit 1;
match (n:BussinessObj)-[r]-() with n.name as name, count(r) as count return name, count order by count desc limit 1;

// 查詢孤立節點
match (n) where not (n)--() return n;
// 查詢孤立節點ID
match (n) where not (n)--() return id(n);


查看某節點相關的所有關系
MATCH (n:BussinessObj ) -[r]->(z) where n.name="凍結" RETURN n,z
MATCH (n:BussinessObj {name:"凍結" } ) -[r]->(z) RETURN n,z
MATCH (b:BussinessObj)-[r]-() RETURN b,r


MATCH (n:BussinessObj {name:"凍結" } ) -[r]->(z) RETURN n,z

深度查詢
1:使用with關鍵字
查詢三層級關系節點如下:with可以將前面查詢結果作為后面查詢條件

MATCH (n1:BussinessObj ) -[r1]->(n2:BussinessObj) where n1.name="凍結"
WITH n1,r1,n2
MATCH (n2:BussinessObj )-[r2]->(n3:BussinessObj)
return n1,r1,n2,r2,n3

2:直接拼接關系節點查詢
match (n1:BussinessObj{name:'凍結'})-[r1]->(n2:BussinessObj)-[r2]->(n3:BussinessObj)
return n1,r1,n2,r2,n3

3.為了方便,可以將查詢結果賦給變量,然后返回
match data=(n1:BussinessObj{name:'凍結'})-[r1]->(n2:BussinessObj)-[r2]->(n3:BussinessObj) return data

 

4.使用深度運算符
當實現多深度關系節點查詢時,顯然使用以上方式比較繁瑣。

可變數量的關系->節點可以使用-[:TYPE*minHops..maxHops]->。

查詢:

如果在1到3的關系中存在路徑,將返回開始點和結束點。

match data=(n1:BussinessObj{name:'凍結'})-[*1..3]->(n2:BussinessObj) return data

返回節點信息+關系信息
match (n1:BussinessObj{name:'清分'})-[r*1..10]->(n2:BussinessObj) return n1 ,r , n2

僅返回節點信息

match (n1:BussinessObj{name:'清分'})-[*1..10]->(n2:BussinessObj) return n1 , n2

僅返回關系
match (n1:BussinessObj{name:'清分'})-[r*1..10]->(n2:BussinessObj) return r
match (n1:BussinessObj)-[r*1..10]->(n2:BussinessObj) return r

 


免責聲明!

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



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