您好,欢迎来到保捱科技网。
搜索
您的当前位置:首页neo4j本人常用CQL语句

neo4j本人常用CQL语句

来源:保捱科技网
neo4j本⼈常⽤CQL语句

neo4j常⽤CQL语句:

查看某节点相关的所有关系

MATCH (n:BussinessObj {name:\"冻结\" } ) -[r]->(z) RETURN n,zMATCH (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.dbsystemctl 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 查询所有的labelCALL db.labels()

// List relationship types 查询所有的typeCALL db.relationshipTypes()

// What is related, and how 查询数据⾥的节点和关系 类似于 SQL的descCALL 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,zMATCH (n:BussinessObj {name:\"冻结\" } ) -[r]->(z) RETURN n,zMATCH (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 rmatch (n1:BussinessObj)-[r*1..10]->(n2:BussinessObj) return r

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务