[Neo4j] CQL命令

docker运行neo4j

  1. 拉取最新的neo4j镜像:
docker pull neo4j
  1. 运行Neo4j 容器:
docker run -it -d -p 7474:7474 -p 7687:7687 neo4j:latest
  1. 打开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
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值