neo4j 学习-2
Neo4j 查询例句
MATCH (john {name: 'John'})-[:friend]->()-[:friend]->(fof) RETURN john.name, fof.name
MATCH (user)-[:friend]->(follower)
WHERE user.name IN ['Joe', 'John', 'Sara', 'Maria', 'Steve'] AND follower.name =~ 'S.*'
RETURN user.name, follower.name
CREATE(DELETE): 创建或删除节点/关系SET(REMOVE): 给属性 赋/ 删 值;给节点 添/删 标签MERGE: 匹配一个节点,如果该节点不存在。则创建该节点MATCH: 从图中查询信息。如:节点、节点属性、节点关系 等等WHERE: 它不是一个单独的句子。但是它是MATCHOPTIONAL MATCH,WITH的一部分,进行限定或者是过滤。或者对WITH的返回结果进行过滤。RETURN: 后接 你想要返回的值、及其格式
MATCH (n {name: 'John'})-[:FRIEND]-(friend)
WITH n, count(friend) AS friendsCount
WHERE friendsCount > 3 // 对 with 的值进行过滤
RETURN n, friendsCount
MATCH (n {name: 'John'})-[:FRIEND]-(friend)
WITH n, count(friend) AS friendsCount
SET n.friendsCount = friendsCount
RETURN n.friendsCount
The RETURN 句子有三个字句,对结果进行处理 : SKIP、LIMIT 和 ORDER BY.
任何对图进行更新的语句,都会在一个 事务中进行.
CREATE (adam:User { name: 'Adam' }),(pernilla:User { name: 'Pernilla' }),(david:User { name: 'David'}),(adam)-[:FRIEND]->(pernilla),(pernilla)-[:FRIEND]->(david)
MATCH (user:User { name: 'Adam' })-[r1:FRIEND]-()-[r2:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName
// 1 这个句子和下面这个句子 2 的结果是一样的,但不同于 3
MATCH (user:User { name: 'Adam' })-[r1:FRIEND]-(friend),(friend)-[r2:FRIEND]-(friend_of_a_friend)RETURN friend_of_a_friend.name AS fofName
// 2 这个句子和 句子 1 效果相同,但是不同于句子 3.虽然中间用“,”号分开了,但他们仍然是一个match句。
MATCH (user:User { name: 'Adam' })-[r1:FRIEND]-(friend)
MATCH (friend)-[r2:FRIEND]-(friend_of_a_friend)
RETURN friend_of_a_friend.name AS fofName
// 3 词句子不同于上面的 句子 1 和句子 2 ,因为这是两个match 句子。
MATCH (n)
RETURN
CASE n.eyes // 这里已经限定了 n.eyes 值 的 类型。
WHEN 'blue'
THEN 1
WHEN 'brown'
THEN 2
ELSE 3 END AS result
// 用 n.eyes 的值,依次和 when 条件进行对,直到得到正确的。返回相应的 then 的值。如果到最后也没有找到正确的,那么就返回 else
// 条件的值。如果未设置 else 条件的值,那么返回 null
MATCH (n)
RETURN
CASE
WHEN n.eyes = 'blue'
THEN 1
WHEN n.age < 40
THEN 2
ELSE 3 END AS result
// 依次计算各个 when 条件,直到找到正确的表达式,返回相应的 then 的 值。如果最后也没有找到正确的表达式
// 那么就返回 else 的值。如果 未设置 else 的值,那么 返回 null
以下是变量的一些用法:
{
"name" : "Johan"
}
MATCH (n:Person)
WHERE n.name = $name
RETURN n
MATCH (n:Person { name: $name })
RETURN n
{
"regex" : ".*h.*"
}
MATCH (n:Person)
WHERE n.name =~ $regex
RETURN n.name
// =~ 后跟正则表达式
{
"s" : 1,
"l" : 1
}
MATCH (n:Person)
RETURN n.name
SKIP $s
LIMIT $l
{
"ids" : [ 0, 1, 2 ]
}
MATCH (n)
WHERE id(n) IN $ids // in
RETURN n.name
WITH ['John', 'Mark', 'Jonathan', 'Bill'] AS somenames
UNWIND somenames AS names // unwind 解包
WITH names AS candidate
WHERE candidate STARTS WITH 'Jo'
RETURN candidate
WITH [2, 4, 7, 9, 12] AS numberlist
UNWIND numberlist AS number
WITH number
WHERE number = 4 OR (number > 6 AND number < 10) // and or 的用法,cypher 也支持 异或
RETURN number
RETURN [1,2,3,4,5]+[6,7] AS myList // 此处 + 用来组合列表。 + 也可以用于拼接字符串
WITH ['Anne', 'John', 'Bill', 'Diane', 'Eve'] AS names
RETURN names[1..3] AS result // 切片 “..” 作用等同于 “:”
(a:User:Admin)-->(b) // 当一个 node 有多个label
变长模式匹配
(a)-[*2]->(b) // 2 表示路径长度是 2 ,也叫深度为 2
(a)-->(c)-->(b) // (a)-->(c) 这就是一个路径长度,包含一个关系两个节点。
(a)-[*3..5]->(b) // 表示 (a)(b)之间的路径长度是3 到5 之间(3,5 都包括)
(a)-->()-->()-->(b)
(a)-->()-->()-->()-->(b)
(a)-->()-->()-->()-->()-->(b)
(a)-[*3..]->(b) // (a),(b)之间的路径距离为 3 及其以上
(a)-[*..5]->(b) //(a),(b)之间的路径为 5 及其以下
(a)-[*]->(b) // (a),(b) 之间的路径距离为 任意值
MATCH (me)-[:KNOWS*1..2]-(remote_friend)
WHERE me.name = 'Filipa'
RETURN remote_friend.name // me 的名字是 Filipa, 返回 和我是 KNOWS 关系的 路径距离是 1 到 2之间 // 的节点(人) 的属性(名字)
可变长度关系不可用于MATCH and MERGE.
一组相互连接的关系和节点被称为 path , Cypher 允许用一个标识符,你也可以用同样的方法,命名 MATCH CREATE 、MERGE 。 注意,这种用标识符命名的方式,不能用于匹配表达式。
You can do this in MATCH, CREATE and MERGE, but not when using patterns as expressions.
p = (a)-[*3..5]->(b) // 不知道为啥,我做不成功
return range(1,10) as list
[1,2,3,4,5,6,7,8,9,10] // 注意:在cyper 中,range() 是包含右边界的。
return range(1,10)[3]
3
RETURN range(0, 10)[-3]
8
RETURN range(0, 10)[0..3] // 切片 相当于python 的 :,注意 这种切片是 含左不含右的
[0,1,2]
RETURN range(0, 10)[0..-5]
[0,1,2,3,4,5] // 右边 “-” 的存在使 右边 的边界元素也 包括 进了切片中
RETURN range(0, 10)[-5..]
[6,7,8,9,10] // 不同 左边的“-” 使 切片 不 包括左边的边界元素
RETURN range(0, 10)[..4]
[0,1,2,3] // 相当于 [:4]
RETURN range(0, 10)[5..15]
[5,6,7,8,9,10] // 超出边界会被截断,只显示 当前具有的一组片段
RETURN range(0, 10)[15]
null // 但如果是单个元素,那么就会返回 null,而不是报错
RETURN [x IN range(0,10) WHERE x % 2 = 0 | x^3] AS result // "|" 管道符的使用,结果的传递处理
match (n{name:"an"}) return [(n)--(b) where b:Person|b.name] as name
[sun,ma] // 一次返回 ,在一个结果里面(可以通过查看 返回的json 格式来发现他们的区别)
MATCH (a:Person { name: 'anxibin' })-[r]-(b:Person) return b.name
sun ,ma //分两次返回,分别在不同的结果里面
with predicates just like a normal WHERE clause, but will yield a custom projection as specified. // predicates 谓语 projection 投影
MATCH (a:Person) return a.name,a.age,a.from
// 查看返回结果的 json 格式,可以看出,它的键一起在一个地方,值一起在另一个地方,键值分离了。
// "a.name" "a.age" "a.from"
// "sun" 18 null
// "ma" 19 null
// map projection 映射
MATCH (a:Person)return a {.name,.age,.from}
// 查看结果的json 格式,可以看出,他们的键值对是在一起的。
{"name":"sun","age":18,"from":null}
{"name":"ma","age":19,"from":null}
MATCH (a:Person)return a {.*}
// {"name":"Emil","from":"beijing","klout":99}
// {"name":"an","age":20}
// {"name":"zhen","age":9}
// 如果map 中是 .* ,那么就会只显示变量自己所拥有的全部属性。而不像上面似的,指定了返回的属性值,如果,该变量没有那个属性值,就只能以 null 填充
// 注意,如果 变量 a 指向的是一个 null 值,那么所有的返回值都是 null
MATCH (a:Person{name:"an"})-[:KNOWS]->(n:Person)return a{.name,.age,friens:n{.name,.age}}
// {"name":"an","age":20,"friens":{"name":"sun","age":21}}
// 变量名也可以作为键
MATCH (a:Person{name:"an"})-[:KNOWS]->(n:Person)return a{.name,.age,friens:collect(n{.name,.age})}
// {"name":"an","age":20,"friens":[{"name":"sun","age":21}]}
// 也可以在聚合函数之类的函数中使用
In Cypher, null is used to represent missing or undefined values. null is not equal to null. Not knowing two values does not imply that they are the same value. So the expression null = null yields null and not true.
| Expression | Result |
|---|---|
| 2 IN [1, 2, 3] | true |
2 IN [1, null, 3] |
null |
2 IN [1, 2, null] |
true |
| 2 IN [1] | false |
| 2 IN [] | false |
null IN [1, 2, 3] |
null |
null IN [1, null, 3] |
null |
null IN [] |
false |
Expressions that return null
Getting a missing element from a list:
[][0],head([])Trying to access a property that does not exist on a node or relationship:
n.missingPropertyComparisons when either side is
null:1 < nullArithmetic expressions containing
null:1 + nullFunction calls where any arguments are
null:sin(null)
neo4j 学习-2的更多相关文章
- Neo4j学习笔记(1)——使用API编写一个Hello World程序
项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管理. 首先创建一个Maven Project,添加依赖: <dependency> <groupId& ...
- Neo4j学习——基本操作(一)
由于开始学习知识图谱,因此需要涉及到neo4j的使用一.介绍neo4j是一个图形数据库基于Java开发而成,因此需要配置jvm才可以运行配置请参考我前面的一篇blog:https://www.cnbl ...
- Neo4j学习笔记(1)——使用Java API实现简单的增删改查
阅读目录 项目的创建及配置 使用嵌入式数据库 创建节点和关系 查询及更新 删除关系和节点 完整代码 参考资料 回到顶部 项目的创建及配置 因为Neo4j依赖的jar包比较多,所以推荐使用Maven来管 ...
- Neo4j 学习笔记(-)
Neo4j 的使用说明(一)(基于V3.4.9) 下一篇(二):https://www.cnblogs.com/infoo/p/11947467.html 一.Neo4j简介 Neo4j是一个高性能的 ...
- Neo4j学习笔记(2)——数据索引
和关系数据库一样,Neo4j同样可以创建索引来加快查找速度. 在关系数据库中创建索引需要索引字段和指向记录的指针,通过索引可以快速查找到表中的行. 在Neo4j中,其索引是通过属性来创建,便于快速查找 ...
- neo4j 学习笔记
1.参考 https://blog.csdn.net/appleyk/article/category/7408344 系列文章 (不支持 spring boo 2.0 以下的,入门可做参考) 2.底 ...
- Neo4j学习笔记
1. 环境搭建 正好最近同学有一台阿里云服务器借我玩,就尝试着在服务器上搭了Neo4j. 环境:CentOS Linux release 7.4.1708 (Core) 安装Java 安装Neo4j需 ...
- Neo4j学习案例【转】
转自 打怪的蚂蚁 CSDN: https://blog.csdn.net/xgjianstart/article/details/77285334 neo4j有社区版本和企业版.社区版本是免费的,只支 ...
- neo4j 学习-1
Neo4j 子句 ```MATCH (:Person { name: 'an' })-[r]->(:Persion) RETURN type(r) // 返回关系的类型 如:r 就是 'KNOW ...
随机推荐
- java数组变量
数组变量是一种引用类型的变量,能够指向数组对象.数组对象存储在堆内存中,当数组变量为局部变量时存储在栈内存中. int[] p = new int[]{5, 6, 7, 8, 9}; p是数组变量,指 ...
- 【jmeter】Jmeter启动GUI界面出错
今天要用Jmeter测试服务器性能,发现GUI界面总是有warning提示: WARNING: Could not open/create prefs root node Software\JavaS ...
- gcc gdb调试 (三)
编写代码过程中少不了调试.在windows下面,我们有visual studio工具.在linux下面呢,实际上除了gdb工具之外,你没有别的选择.那么,怎么用gdb进行调试呢?我们可以一步一步来试试 ...
- bzoj 4911: [Sdoi2017]切树游戏
考虑维护原树的lct,在上面dp,由于dp方程特殊,均为异或卷积或加法,计算中可以只使用fwt后的序列 v[w]表示联通子树的最浅点为w,且不选w的splay子树中的点 l[w]表示联通子树的最浅点在 ...
- 神奇的null和undefined
在JavaScript中,有两个特殊的类型存在,它们都只有一个值,分别null和undefined,之所以将它们放在一块,是因为在使用方面它们有很多相似之处. 相同点 在JavaScript中,nul ...
- jstack 查看线程状态
使用jstack pid命令可以查看JVM的线程状态,其中值得关注的线程状态有:死锁,Deadlock(重点关注)执行中,Runnable等待资源,Waiting on condition(重点关注) ...
- [UE4]使用PlayerController获取鼠标点击时的坐标
1,获取鼠标在当前场景中坐标系统的中的position,加入场景地图的范围是一千平方米,那么这个position的范围也是1000米x1000米. 注册鼠标事件 FInputActionBinding ...
- js在table指定tr行上或底下添加tr行
js在table指定tr行上或下面添加tr行 function onAddTR(trIndex) { var tb = document.getElementB ...
- dubbo 官方参考手册~备案(防止哪天阿里一生气把dubbo给删除了)
首页 || 下载 || 用户指南 || 开发者指南 || 管理员指南 || 培训文档 || 常见问题解答 || 发布记录 || 发展路线 || 社区 E ...
- RNN总结
RNN既可以表述为循环神 经网络(recurrent neural network),也可以表述为递归神经网络(recursive neural network),前者一般用于处理以时间序列为输入的问 ...