当前位置:   article > 正文

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

neo4j查找所有最短路径

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())
  • 1
  • 2
  • 3
  • 4

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

LIMIT 限制几行

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

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

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

MATCH (n)
RETURN n.name, n.age
ORDER BY n.age, n.name
  • 1
  • 2
  • 3

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

MATCH (n)
RETURN n.name, n.age, n.length
ORDER BY keys(n)
  • 1
  • 2
  • 3

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

MATCH (n)
RETURN n.name, n.age
ORDER BY n.name DESC
  • 1
  • 2
  • 3

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

MATCH (n)
RETURN n.length, n.name, n.age
ORDER BY n.length
  • 1
  • 2
  • 3

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


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

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

注释

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

MATCH (n) RETURN n //This is an end of line comment
  • 1
MATCH (n)
//This is a whole line comment
RETURN n
  • 1
  • 2
  • 3

关系

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

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

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

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

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

电影案例

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

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

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

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

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

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

MATCH (p:Person) RETURN p limit 20
  • 1

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

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

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

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

结果:两者语句结果相同

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

结果:如果 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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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

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

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

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

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

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

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

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

结果寻找距离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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

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

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

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

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

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

多重匹配

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

计算

句法:

CASE test
  WHEN value THEN result
  [WHEN ...]
  [ELSE default]
END
  • 1
  • 2
  • 3
  • 4
  • 5
姓名描述
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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
MATCH (n)
RETURN
CASE
  WHEN n.eyes = 'blue' THEN 1
  WHEN n.age < 40      THEN 2
  ELSE 3
END AS result
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
MATCH (n)
RETURN n.name,
CASE 
  WHEN n.age IS NULL THEN -1
  ELSE n.age - 10
END AS age_10_years_ago
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

更新set

查询返回新更改的节点

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

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

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

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

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

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

MATCH
  (at {name: 'Andy'}),
  (pn {name: 'Peter'})
SET at = pn
RETURN at.name, at.age, at.hungry, pn.name, pn.age
  • 1
  • 2
  • 3
  • 4
  • 5

替换属性为空

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

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

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

这样就不起作用了

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

添加属性

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

最短路径搜索算法

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
  • 1
  • 2
  • 3
  • 4
  • 5

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

更多语句参考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文件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/1013762
推荐阅读
相关标签
  

闽ICP备14008679号