neo4j命令

本文详细介绍了使用Cypher在Neo4j中进行多标签节点属性查询、集合函数、关系操作、图谱管理以及数据更新和删除的方法,包括查询特定标签的节点、属性名、路径和关系,以及更新和删除节点和关系的示例.
摘要由CSDN通过智能技术生成

1. 查询多个label下的所有节点的某个属性

match (n) where any(label in labels(n) where label in ["label1","label2"]) return n.name as name

2. 查询多个label下的所有属性名

match (n) where any(label in labels(n) where label in ["label1","label2"]) return distinct keys(n)

断言函数(Predicate functions)

ALL(identifier in collection WHERE predicate) 判断一个断言(predicate)是否满足集合(collection)里的所有元素

ANY(identifier in collection WHERE predicate) 判断一个断言(predicate)是否至少满足集合(collection)里的一个元素

NONE(identifier in collection WHERE predicate) 如果集合(collection)里的元素不满足断言(predicate)则返回true

SINGLE(identifier in collection WHERE predicate) 如果集合(collection)里的只有一个元素满足断言(predicate)则返回true

标量函数(Scalar functions)

LENGTH( collection ) 返回集合的元素个数

TYPE( relationship ) 返回关系的类型

ID( property-container ) 返回节点或者关系的ID

COALESCE( expression [, expression]* ) 返回expressions列表里第一个不为空的值

HEAD( expression ) 返回一个集合 (collection) 里的第一个元素

LAST( expression ) 返回一个集合 (collection) 里最后一个元素

集合函数(Collection functions)

NODES( path ) 返回一个路径的所有节点

RELATIONSHIPS( path ) 返回一个路径的所有关系

EXTRACT( identifier in collection : expression ) 返回一个结果集合:对集合(collection)的所有元素执行expression的操作得到的结果

FILTER(identifier in collection : predicate) 返回集合(collection)中所有满足断言(predicate)的元素组成的集合

TAIL( expression ) 返回集合中除了第一个之外的所有元素

RANGE( start, end [, step] ) 返回从start开始,end结束(闭区间)内步长为step(非0)的所有整数数字

数学函数(Mathematical functions)

ABS( expression ) 返回expression得到的数值的绝对值

ROUND( expression ) 取整函数:返回小于等于expression得到的数值的最大整数(还是返回离expression得到的数值最近的整数)

SQRT( expression ) 返回expression得到的数值的平方根

SIGN( expression ) 符号函数:如果expression得到的数值,为0则返回0;为负数则返回-1;为正数则返回1

聚合函数(Aggregate functions)

COUNT( expression ) 返回expression得到的结果的个数,expression也可为"*"

SUM( expression ) 返回expression得到结果相加的和

AVG( expression ) 返回expression得到结果的平均值

MAX( expression ) 返回expression得到结果的最大值

MIN( expression ) 返回expression得到结果的最小值

COLLECT( expression ) 把expression得到的结果以list的形式返回

重命名 MATCH (n:`指挥`) where n.name="道尼尔Do17Z/E/M轰炸机" set n.name="道尼尔Do17ZEM轰炸机" RETURN n

查找数据库 MATCH (n:`指挥`) RETURN n LIMIT 25

删除重复关系

(

MATCH (a)-[r]->(b)

WITH a, b, TAIL (COLLECT (r)) as rr

WHERE size(rr)>0

FOREACH (r IN rr | DELETE r)

)

查找关系

MATCH (n:`态势`) where n.name='美国'

MATCH (m:`态势`) where m.name='中华人民共和国'

match (n)-[jx]-(m) return n,jx,m

MATCH (n:`态势`)-[jx]-(m:`态势`) return n,jx,m

返回关系

match path=(m:首长办公)-[:请销假]->(p:首长办公) return relationships(path)

创建关系

MATCH (n:`态势`) WHERE n.name='中国人民解放军'

MATCH (m:`态势`) WHERE m.name='中央军委联合参谋部'

CREATE (n)-[jx:所属主体]->(m) return n,jx,m

match(n:行政管理{name:"行政管理"}),(m:行政管理{name:"请销假"})merge(n)-[r:下一步]->(m)

删除关系

MATCH (n:`态势`) where n.name='中华人民共和国'

MATCH (m:`态势`) where m.name='中国钓鱼岛'

optional match (n)-[r]-(m) delete r

删除所有关系和节点,清空数据库 optional指可能

MATCH (n)

OPTIONAL MATCH (n)-[r]-()

DELETE n,r

查找节点

match(n:首长办公{name:'1月7日'}),(m:首长办公) where (n)-[:请销假]->(m) return n,m

按照id删除节点

START n=node(232025) detach delete n

# 删除节点及其关系

match (n : {name : "Andres"}) detach delete n

# 查找没有关系的节点

match (n) where not (n)–[]-() return n

# 模糊查询

MATCH (n:`会议图谱`)where n.姓名=~".*11月23号早会.*"

match(n)-[jx]-(m) return n,jx,m

# 模糊查询标签

match (n) where any(label in labels(n) WHERE label in ['A 标签', 'B 标签']) return n

# 启动neo4j数据库

docker ps -a | grep 端口号

docker start 镜像名

docker exec -it a0a7f2772c71 /bin/bash

ls

cd bin/

ls

./neo4j start

exit

# 根据标签筛选

MATCH data = (n:LABEL)-[*1…5]->(m) where any(label in labels(m) where label in [label1,label2]) RETURN data LIMIT 30

# 更改关系类型

MATCH (n)-[r]-(m)

CREATE (n)-[r2]->(m)

// copy properties, if necessary

SET r2 = r

WITH r

DELETE r

删除重复结点

MATCH (pp)

WITH pp

ORDER BY pp.NAME,size((pp)–()) DESC

WITH pp.NAME as name, collect(pp) AS nodes

WHERE size(nodes) > 1

UNWIND nodes[1…] AS n

DETACH DELETE n

导出CSV

#NEO4J CONJ

apoc.import.file.use_neo4j_config=true

apoc.export.file.enabled=true

apoc.import.file.enabled=true

dbms.directories.import=import

dbms.security.allow_csv_import_from_file_urls=true

###起止结点及关系

WITH “MATCH path = (n)-[R]->(m)

RETURN n.NAME AS START_NAME,m.NAME AS END_NAME,TYPE® AS RELATION_NAME LIMIT 50” AS query

CALL apoc.export.csv.query(query, “kg.csv”, {})

YIELD file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data

RETURN file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data;

###结点ID,名称,标签

WITH “MATCH (n)

RETURN id(n) as NODE_ID,n.NAME AS NODE_NAME,LABELS(n) AS NODE_LABEL LIMIT 50” AS query

CALL apoc.export.csv.query(query, “nodes.csv”, {})

YIELD file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data

RETURN file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data;

###关系名

WITH "MATCH (n)-[r]-(m)

RETURN distinct TYPE® AS RELATION_NAME " AS query

CALL apoc.export.csv.query(query, “relation.csv”, {})

YIELD file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data

RETURN file, source, format, nodes, relationships, properties, time, rows, batchSize, batches, done, data;

1.如何找到一个节点x,x以某种关系同时连接两个不同节点a和b

match (a)-[r:relation]->(x)

2.如何找到节点a和b之间的最短路径

(1)match p=shortestpath((a)-[r:relation]-(b)) return nodes(p)

(2)match(n:na{name:’###’}),(m:nb{name:’###’})with n,m match p=shortestpath((n)-[r*…]-(m)) return p;

3.如何找到节点a和b之间以某种关系相连接的最短路径

p=shortestpath((a)-[r:relationname]->(b)) return nodes(p)

4.找到数据库中出现的唯一节点标签

match n return distinct labels(n)

5.找到数据库中出现的唯一关系类型

match n-[r]-() return distinct type(r)

6.找到数据库中的唯一节点标签和唯一关系类型

match n-[r]-() return distinct labels(n),type(r)

7.找到不与任何关系(或某种关系)向连的节点

start n = node() match n-[r:relationname]-() where r is null return n

8.找到某个带有特定属性的节点

start n=node() match n where has (n.someproperty) return n

9.找到与某种关系相连接的全部节点

start n= node() match n-[r:relationshipname]-() return distinct n

10.找到节点和它们的关系数,并以关系数目降序排列显示

start n=node() match n-[r]-() return n,count(r) as rel_count order by rel_count desc

11.返回图中所有节点的个数

start n = node() match n return count(n)

12.(1)删除图中关系:start n=node(*) match n-[r]-() delete r

(2)删除图中节点:start n =node(*) match n delete n

(3)删除图中所有东西:match (n) detach delete n

13.查询某类节点下某属性为特定值的节点

match (n:person)where n.name=”alice” return n

14.with

Cypher中的With关键字可以将前步查询的结果作为后一步查询的条件,这个在我的工作中可是帮了大忙哈哈。下面是两个栗子。

(1)match(p:node_se)-[re:推理条件]->(q:node_se) where p.name=‘FEV1%pred’and p.value=’

(2)match(p:node_patient)-[re:个人情况]->(q:node_se) where p.name=‘qwe’ WITH p,re,q match (q:node_se) -[re2:推荐方案]-> (c:node_se) where q.name=‘first’ WITH p, re,q,re2,c match (c:node_se)-[re3:方案细节]->(d:drugs) return p, re,q,re2,c,re3,d

15.查询符合条件的某个节点的id

match(p) where p.name = ‘***’ and p.value = ‘***’ return id(p)

16.直接连接关系节点进行多层查询

match(na:bank{id:‘001’})-[re1]->(nb:company)-[re2]->(nc:people) return na,re1,nb,re2,nc

17.可以将查询结果赋给变量,然后返回

match data=(na:bank{id:‘001’})-[re1]->(nb:company)-[re2]->(nc:company) return data

18.变长路径检索

变长路径的表示方式是:[*N…M],N和M表示路径长度的最小值和最大值。

(a)-[ *2]->(b):表示路径长度为2,起始节点是a,终止节点是b;

(a)-[ *3…5]->(b):表示路径长度的最小值是3,最大值是5,起始节点是a,终止节点是b;

(a)-[ *…5]->(b):表示路径长度的最大值是5,起始节点是a,终止节点是b;

(a)-[ *3…]->(b):表示路径长度的最小值是3,起始节点是a,终止节点是b;

(a)-[ *]->(b):表示不限制路径长度,起始节点是a,终止节点是b;

19.Cypher对查询的结果进行去重

栗:match(p:node_se)-[re]->(q)where re.name <> ‘and’ return distinct(re.name)

(注:栗子中的<>为Cypher中的操作符之一,表示‘不等于’)

20.更新节点的 labels

Neo4j中的一个节点可以有多个 label,返回所有节点的label:match (n) return labels(n)

修改节点的 label,可以先新加 label,再删除旧的label

match (n:label_old) set n:label_new remove n:label_old

match(n:label_new) return labels(n)

21.更新节点的属性

match(n:) set n.new_property = n.old_property remove n.old_proerty

移除label标签

match (n:Person{name:“张三”}) remove n:Person return n

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值