美文网首页
[Neo4J] Cypher查询语言(CQL) 语法参考教程

[Neo4J] Cypher查询语言(CQL) 语法参考教程

作者: 爱上落入尘世间的你 | 来源:发表于2020-03-18 21:16 被阅读0次

neo4j官方的javascript驱动是neo4j-driver, 可以在浏览器环境和node.js环境运行, 直接对数据库进行查询, 返回结果

注意: 这不是一篇零基础的neo4j教程, 而是对于有一定neo4j基础的同学比较有用的参考手册, 可以快速的复习cql的语法, 也可以用作语法的参考手册在不记得一些细节的时候用来快速查询

代码示例如下:

const neo4j = require('neo4j-driver') // node.js
import neo4j from 'neo4j-driver' // browser

const driver = neo4j.driver(
                    'bolt://localhost:7687',
                    neo4j.auth.basic('neo4j', 'admin')
                )

const session = driver.session()
const result = await session.run(cql)
console.log(result)

基本语法

节点语法

用圆括号() 用来表示节点
(n)用来为节点赋予一个名字, 可以用来在需要时引用这个节点
(n:label) 用来匹配有某个标签的节点
(n:label:label:label2) 可以用来匹配具有多个标签的节点
(n:label1:label2 {key:value}) 用对象字面量的方式, 通过节点的属性对节点进行筛选

关系语法

用方括号[]来表示关系
关系与节点一样, 可以赋予一个名字以便于在别处引用, 也可以用标签来进行筛选
[r] 表示一个关系被赋予到变量r, 可以在别处用r引用该关系
[r:label] 用来匹配有某个标签的关系

注意, 关系只能有一个标签, 不像节点可以有多个标签

[r:label1 | :label2] 用来匹配多种关系中的一种
[n:label1 | label2 {key:value}] 用对象字面量的方式, 通过节点的属性对节点进行筛选
() -> [*3..5] -> () 用来表示变长关系, 即两个节点之间通过3-5个关系连接
() -> [*3..] -> () 关系长度大于3
() -> [*..5] -> () 关系长度小于5
() -> [*] -> () 任意边界长度

变长关系不能用于create和merge语句中

match (n) - [:knows *1..2] - (n1)
return n

关系与节点的连接(单个横杠)

- 表示双向连接
-> 或者<- 表示单向连接
例如:

()-[]-()
()->[]->()
[]<-()->[]->()

节点与节点直接连接(两个横杠)

如果不在意节点之间通过何种关系连接, 可以用--, -->, <--来直接连接节点与节点

() -- () --> ()
() --> () <-- ()

节点之间通过关系连接代表着匹配的模式, 可以被赋予一个变量用来在需要时引用
例如:

acted_in = (:person) -> [:acted_in] -> (:movie)

节点的id

neo4j的节点id是整数类型, 由数据库内部自行维护, 在查询语句中可以用id(n)函数来获取

match (n)
where id(n)  = $id
return n.name

match (n)
where id(n) in [1, 2, 3]
return n.name

语句可以分为3类

读语句: match, optional match, where, start, aggregation, load csv
写语句: create, merge, set, delete, remove, foreach, create unique
通用语句: return, order by, limit, skip, with, unwind, union, call

相关文章

网友评论

      本文标题:[Neo4J] Cypher查询语言(CQL) 语法参考教程

      本文链接:https://www.haomeiwen.com/subject/xwthyhtx.html