赞
踩
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 | 换页 |
’ | 单引号 |
" | 双引号 |
\ | 反斜杠 |
\uxxxx | Unicode 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
或作为表达式的模式时)。它不适用于CREATE
or 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 的电影和演员
查询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
查询返回新更改的节点
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/
备份地址(没有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文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。