大家好,欢迎来到IT知识分享网。
文章目录
docker运行neo4j
- 拉取最新的neo4j镜像:
docker pull neo4j
- 运行Neo4j 容器:
docker run -it -d -p 7474:7474 -p 7687:7687 neo4j:latest
- 打开Neo4j 浏览器管理界面:
http://10.141.211.163:7474
CQL
create创建一个节点
!!CREATE命令总是向数据库添加新的节点,就算所有属性都相同也会添加进数据库
//没属性
CREATE (<node-name>:<label-name>)
eg:
create (m1:Method)
//有属性
CREATE (
<node-name>:<label-name>
{
<Property1-name>:<Property1-Value>
........
<Propertyn-name>:<Propertyn-Value>
}
)
eg:
create(
m1:Method
{
modifier: 'public',
returnType: 'int',
methodName: 'com.thinkgem.jeesite.modules.sys.dao.LogDao.insert',
params: ['java.lang.Object']
}
)
create(
m2:Method
{
modifier: 'public',
returnType: 'int',
methodName: 'com.thinkgem.jeesite.modules.sys.dao.LogService.insert',
params: ['java.lang.Object']
}
)
create(
s1:Sql
{
databaseName: 'jeesite',
sql: 'select * from t1'
}
)
create(
t1:Table
{
databaseName: 'jeesite',
tableName: 'table1'
}
)
match获取数据
!!!不可以单独使用,会报错
MATCH
(
<node-name>:<label-name>
)
eg: match (m1:Method)
output:
ERROR
Neo.ClientError.Statement.SyntaxError
Neo.ClientError.Statement.SyntaxError: Query cannot conclude with MATCH (must be RETURN or an update clause) (line 1, column 1 (offset: 0))
"match (m1:Method)"
RETURN子句
!!!不可以单独使用,会报错
RETURN
<node-name>.<property1-name>,
........
<node-name>.<propertyn-name>
eg:
return m1.methodName
output:
ERROR
Neo.ClientError.Statement.SyntaxError
Neo.ClientError.Statement.SyntaxError: Variable `m1` not defined (line 1, column 8 (offset: 7))
"return m1.methodName"
MATCH & RETURN匹配和返回
在Neo4j CQL中,我们不能单独使用MATCH或RETURN命令,因此我们应该合并这两个命令以从数据库检索数据。
match (m1: Method)
return m1.methodName,m1.returnType
match (m1:Method)
return m1
关系
//节点已存在
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>]->(<node2-label-name>)
RETURN <relationship-label-name>
MATCH (<node1-label-name>:<node1-name>),(<node2-label-name>:<node2-name>)
CREATE
(<node1-label-name>)-[<relationship-label-name>:<relationship-name>
{
<define-properties-list>}]->(<node2-label-name>)
RETURN <relationship-label-name>
//节点不存在
CREATE
(<node1-label-name>:<node1-name>)-
[<relationship-label-name>:<relationship-name>]->
(<node1-label-name>:<node1-name>)
RETURN <relationship-label-name>
eg:
match (m2:Method{
methodName: 'com.thinkgem.jeesite.modules.sys.dao.LogService.insert'}),(m1:Method{
methodName: 'com.thinkgem.jeesite.modules.sys.dao.LogDao.insert'})
create (m2)-[r:MethodCall{
traceId:6574973980984213592}]->(m1)
where子句
WHERE <condition> <boolean-operator> <condition>
<condition>
语法:
<property-name> <comparison-operator> <value>
eg:
MATCH (m1:Method)
WHERE m1.methodName = 'com.thinkgem.jeesite.modules.sys.dao.LogService.insert'
AND m1.modifier = 'public'
RETURN m1
match (m2:Method),(m1:Method)
where m2.methodName = 'com.thinkgem.jeesite.modules.sys.dao.LogService.insert'
and m1.methodName = 'com.thinkgem.jeesite.modules.sys.dao.LogDao.insert'
create (m2)-[r:MethodCall{
traceId:6574973980984213592}]->(m1)
delete子句
- 删除节点。
- 删除节点及相关节点和关系。
//使用逗号(,)运算符来分隔节点名。
DELETE <node-name-list>
eg:
match (m2:Method)-[r]-(m1:Method)
delete r
remove子句
- 使用Neo4j CQL SET子句向现有节点或关系添加新属性。
- 使用Neo4j CQL REMOVE子句来删除节点或关系的现有属性
- Neo4j CQL DELETE和REMOVE命令之间的相似性:这两个命令不应单独使用。两个命令都应该与MATCH命令一起使用。
REMOVE <property-name-list>
//<property-name-list> <属性名称列表>语法
<node-name>.<property1-name>,
<node-name>.<property2-name>,
....
<node-name>.<propertyn-name>
eg:
MATCH (book {
id:122 })
REMOVE book.price
RETURN book
//REMOVE一个Label子句语法:
REMOVE <label-name-list>
//<label-name-list>语法
<node-name>:<label2-name>,
....
<node-name>:<labeln-name>
eg:删除
MATCH (m:Movie)
REMOVE m:Picture
SET子句
- 向现有节点或关系添加新属性
- 添加或更新属性值
MATCH (m1:Method)-[r]-(m2:Method)
SET r.scenarioId = 23333, r.scenarioName = 's1'
RETURN r
ORDER BY子句
ORDER BY <property-name-list> [DESC]
eg:
MATCH (emp:Employee)
RETURN emp.empid,emp.name,emp.salary,emp.deptno
ORDER BY emp.name DESC
UNION子句
它将两组结果中的公共行组合并返回到一组结果中。它不从两个节点返回重复的行。
限制:结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。
<MATCH Command1>
UNION
<MATCH Command2>
AS子句用于给一些别名
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
dc.valid_from as valid_from,dc.valid_to as valid_to
UNION ALL子句
它结合并返回两个结果集的所有行成一个单一的结果集。不过滤它们重复行!!
限制: 结果列类型,并从两个结果集的名字必须匹配,这意味着列名称应该是相同的,列的数据类型应该是相同的。
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
cc.valid_from as valid_from,cc.valid_to as valid_to
UNION ALL
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
dc.valid_from as valid_from,dc.valid_to as valid_to
LIMIT子句
MATCH (emp:Employee)
RETURN emp
LIMIT 2
SKIP子句
过滤或限制查询返回的行数。 它修整了CQL查询结果集顶部的结果。
(如果我们要从CQL查询结果集底部修整结果,那么我们应该使用CQL LIMIT子句。)
//只返回底部的1个结果,也就是最后一行
match(m:Method)
return m
skip 1
MERGE命令
- 创建节点,关系和属性
-为从数据库检索数据
Neo4j CQL MERGE命令在图中搜索给定模式,如果存在,则返回结果;如果它不存在于图中,则它创建新的节点/关系并返回结果
!!CREATE命令总是向数据库添加新的节点,就算所有属性都相同也会添加进数据库
MERGE = CREATE + MATCH
MERGE (<node-name>:<label-name>
{
<Property1-name>:<Pro<rty1-Value>
.....
<Propertyn-name>:<Propertyn-Value>
})
IN操作符
MATCH (e:Employee)
WHERE e.id IN [123,124]
RETURN e.id,e.name,e.sal,e.deptno
字符串函数
UPPER (<input-string>)
LOWER (<input-string>)
SUBSTRING(<input-string>,<startIndex> ,<endIndex>)
AGGREGATION聚合
eg:
MATCH (e:Employee) RETURN COUNT(*)
MATCH (e:Employee)
RETURN MAX(e.sal),MIN(e.sal)
MATCH (e:Employee)
RETURN SUM(e.sal),AVG(e.sal)
关系函数
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN STARTNODE(movie)
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN ENDNODE(movie)
MATCH (a)-[movie:ACTION_MOVIES]->(b)
RETURN ID(movie),TYPE(movie)
索引
CREATE INDEX ON :<label_name> (<property_name>)
eg:
CREATE INDEX ON :Customer (name)
DROP INDEX ON :<label_name> (<property_name>)
UNIQUE约束
- 避免重复记录。
- 强制执行数据完整性规则。
CREATE CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
eg:
CREATE CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE
DROP CONSTRAINT ON (<label_name>)
ASSERT <property_name> IS UNIQUE
eg:
DROP CONSTRAINT ON (cc:CreditCard)
ASSERT cc.number IS UNIQUE
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15630.html