Neo4j命令语句知识计算(Neo4j Cypher Manual精选总结)最短路径搜索算法

Neo4j AuraDB

Neo4j官方提供的免费的远程图数据库
Neo4j version 4
Region Belgium (europe-west1), GCP
Nodes 0 / 50000 (0%)
Relationships 0 / 175000 (0%)
其中的电影案例命令更加丰富,想深入学习的小伙伴可以注册一个。

查看全部的数据库**

SHOW DATABASES

创建一个新的数据库

CREATE DATABASE (数据库名称不区分大小写)

使用该数据库

use (数据库名)

验证数据库是否为空

CALL db.schema.visualization()

查看数据库所有数据

MATCH (n) RETURN n

删除数据库所有数据

MATCH (n) DETACH DELETE n

查询语句

格式

RETURN条款附带三个子条款:

SKIP 跳过几行

MATCH (n)
RETURN n.name
ORDER BY n.name
SKIP 1 + toInteger(3*rand())

跳过第一行加上随机 0、1 或 2。所以随机跳过 1、2 或 3 行。

LIMIT 限制几行

MATCH (n)
RETURN n.name
ORDER BY n.name
LIMIT 1 + toInteger(3 * rand())

限制 1 行加上随机 0、1 或 2。因此随机限制为 1、2 或 3 行。

ORDER BY 升序(以指定项的值)+DESC(降序)

MATCH (n)
RETURN n.name, n.age
ORDER BY n.age, n.name

这将返回节点,首先按年龄排序,然后按名称排序。

MATCH (n)
RETURN n.name, n.age, n.length
ORDER BY keys(n)

返回节点,按其属性排序。

MATCH (n)
RETURN n.name, n.age
ORDER BY n.name DESC

该示例返回节点,按其名称以相反的顺序排序。

MATCH (n)
RETURN n.length, n.name, n.age
ORDER BY n.length

null对结果集进行排序时,升序排序总是排在结果集的末尾,降序排序时排在最前面。


字符串文字可以包含以下转义序列:

转义序列特点
\t标签
\b退格
\n新队
\r回车
\f换页
单引号
"双引号
\反斜杠
\uxxxxUnicode UTF-16 代码点(必须跟随 4 个十六进制数字\u)

注释

注释以双斜杠//开头并一直到行尾。评论不会执行,它们是供人类阅读的。

MATCH (n) RETURN n //This is an end of line comment
MATCH (n)
//This is a whole line comment
RETURN n

关系

如果我们想描述一些数据,使得关系可以具有一组类型中的任何一种,那么它们都可以在模式中列出,用管道符号将它们分开

(a)-[r:TYPE1|TYPE2]->(b)

请注意,这种形式的模式只能用于描述现有数据(即,当使用带有MATCH或作为表达式的模式时)。它不适用于CREATEor MERGE,因为不可能创建具有多种类型的关系。

(a)-[*3..5]->(b)

最小长度为 3,最大长度为 5。它描述了一个由 4 个节点和 3 个关系、5 个节点和 4 个关系或 6 个节点和 5 个关系组成的图,所有这些都在一条路径中连接在一起

电影案例

Match (m:Movie) where m.released > 2000 RETURN m limit 5

结果:查询将返回 2000 年之后发布的所有电影,将结果限制为 5 项。

Match (m:Movie) where m.released > 2005 RETURN count(m)

结果:查询将返回 2005 年之后上映的电影数量。(提示:您可以使用该count(m)函数返回数量)

MATCH (p:Person)-[d:DIRECTED]-(m:Movie) where m.released > 2010 RETURN p,d,m

结果:上述查询将返回所有导演了 2010 年之后发行的电影的 人物。

MATCH (p:Person) RETURN p limit 20

结果:将只返回Person节点(限制为 20 个项目)

MATCH (m:Movie) return m.title, m.released

结果:返回节点的特定属性

Match (p:Person {name: 'Tom Hanks'}) RETURN p
等价于
MATCH (p:Person) where p.name = "Tom Hanks" RETURN p

结果:两者语句结果相同

MERGE (p:Person {name: 'John Doe'})
ON MATCH SET p.lastLoggedInAt = timestamp()
ON CREATE SET p.createdAt = timestamp()
Return p

结果:如果 Person 节点不存在,上面的语句将创建它。如果节点已经存在,那么它会将属性设置lastLoggedInAt为当前时间戳。如果节点不存在并且是新创建的,那么它将将该createdAt属性设置为当前时间戳。

MATCH (p:Person), (m:Movie)
WHERE p.name = "Tom Hanks" and m.title = "Cloud Atlas"
CREATE (p)-[w:WATCHED]->(m)
RETURN type(w)
等价于
MATCH (p:Person{name:"Tom Hanks"}), (m:Movie{title:"Cloud Atlas"})
CREATE (p)-[w:WATCHED]->(m)
RETURN type(w)

结果WATCHED在现有节点和节点之间Person创建关系,Movie并返回关系类型(即WATCHED

MATCH (m:Movie {title: 'Cloud Atlas'})<-[d:DIRECTED]-(p:Person) return p.name

结果:寻找谁导演了 Cloud Atlas 电影

MATCH (tom:Person {name: "Tom Hanks"})-[:ACTED_IN]->(:Movie)<-[:ACTED_IN]-(p:Person) return p.name

结果:找到所有在任何电影中与汤姆汉克斯合作过的人

MATCH (p:Person)-[relatedTo]-(m:Movie {title: "Cloud Atlas"}) return p.name, type(relatedTo)

结果以任何方式查找与电影《云图集》相关的所有人

MATCH (p:Person {name: 'Kevin Bacon'})-[*1..3]-(hollywood) return DISTINCT p, hollywood

结果寻找距离Kevin Bacon 关联度为 3 的电影和演员

Neo4j Cypher Manual

查询john朋友的朋友

MATCH (john {name: 'John'})-[:FRIEND]->()-[:FRIEND]->(fof)
RETURN john.name, fof.name
等价于
MATCH
  (user:User {name: 'Adam'})-[r1:FRIEND]-(friend),
  (friend)-[r2:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName

获取一个用户名列表,并从该列表中找到具有名称的所有节点,匹配他们的朋友并仅返回那些具有以**‘S’开头的’name’**属性的被关注用户

MATCH (user)-[:FRIEND]->(follower)
WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*'
RETURN user.name, follower.name

当您想使用聚合数据进行过滤时,您必须将两个阅读查询部分链接在一起,第一个进行聚合,第二个过滤来自第一个的结果。

WITH就像一个事件视界——它是一个计划和该计划的完成执行之间的分分界

MATCH (n {name: 'John'})-[:FRIEND]-(friend)
WITH n, count(friend) AS friendsCount
WHERE friendsCount > 3
RETURN n, friendsCount

查找所有只具有 5 个关系的路径并且不关心关系方向

MATCH p = ()-[*5]-()
RETURN nodes(p)

多重匹配

MATCH (user:User {name: 'Adam'})-[r1:FRIEND]-(friend)
MATCH (friend)-[r2:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName

计算

句法:

CASE test
  WHEN value THEN result
  [WHEN ...]
  [ELSE default]
END
姓名描述
test一个有效的表达式。
value一个表达式,其结果将与 进行比较test
result如果value匹配,这是作为输出返回的表达式test
default如果未找到匹配项,default则返回。

举例:

MATCH (n)
RETURN
CASE n.eyes
  WHEN 'blue'  THEN 1
  WHEN 'brown' THEN 2
  ELSE 3
END AS result
MATCH (n)
RETURN
CASE
  WHEN n.eyes = 'blue' THEN 1
  WHEN n.age < 40      THEN 2
  ELSE 3
END AS result
MATCH (n)
RETURN n.name,
CASE 
  WHEN n.age IS NULL THEN -1
  ELSE n.age - 10
END AS age_10_years_ago

更新set

查询返回新更改的节点

MATCH (n {name: 'Andy'})
SET n.surname = 'Taylor'
RETURN n.name, n.surname

SET可用于更新节点或关系上的属性,该age属性已转换为字符串'36'

MATCH (n {name: 'Andy'})
SET n.age = toString(n.age)
RETURN n.name, n.age

虽然REMOVE通常用于删除属性,但有时使用该SET命令会很方便

MATCH (n {name: 'Andy'})
SET n.name = null
RETURN n.name, n.age

SET可用于将所有属性从一个节点或关系复制到另一个

MATCH
  (at {name: 'Andy'}),
  (pn {name: 'Peter'})
SET at = pn
RETURN at.name, at.age, at.hungry, pn.name, pn.age

替换属性为空

MATCH (p {name: 'Peter'})
SET p = {}
RETURN p.name, p.age

保持原有属性不变的情况下更新

MATCH (p {name: 'Peter'})
SET p += {age: 38, hungry: true, position: 'Entrepreneur'}
RETURN p.name, p.age, p.hungry, p.position

这样就不起作用了

MATCH (p {name: 'Peter'})
SET p += {}
RETURN p.name, p.age

添加属性

MATCH (n {name: 'Andy'})
SET n.position = 'Developer', n.surname = 'Taylor'
RETURN n

最短路径搜索算法

MATCH (KevinB:Person {name: 'Kevin Bacon'} ),
      (Al:Person {name: 'Al Pacino'}),
      p = shortestPath((KevinB)-[:ACTED_IN*]-(Al))
WHERE all(r IN relationships(p) WHERE exists(r.role))
RETURN p

这个查询可以使用快速算法进行评估——没有谓词需要在评估之前查看整个路径

更多语句参考https://neo4j.com/docs/cypher-manual/4.0/

load_csv

备份地址(没有import可以自己创建)
dbms.directories.import=/var/lib/neo4j/import

很多文章中提到了graph.db,但是怎么找也找不到
进入neo4j下的conf文件,打开neo4j.conf,在#dbms.default_database=neo4j下边,添加一行dbms.active_database=graph.db

删除数据库方式(删除全部)
/var/lib/neo4j下全部文件
/ect/neo4j/neo4j.config文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值