CQL 函数
字符串函数
| 功能 | 描述 |
|---|---|
| UPPER | 它用于将所有字母改为大写字母 |
| LOWER | 它用于将所有字母改为小写字母 |
| SUBSTRING | 它用于获取给定String的字符串 |
| REPLACE | 它用于替换一个字符串的子字符串 |
举例:
MATCH (p:Person)
RETURN ID(p), LOWER(p.character)
聚合函数
| 聚合功能 | 描述 |
|---|---|
| COUNT | 它返回由MATCH命令返回的行数 |
| MAX | 它从MATCH命令返回一组行返回最大值 |
| MIN | 它返回由MATCH命令返回的一组行最小值 |
| SUM | 它返回由MATCH命令返回的所有行的求和值 |
| AVG | 它返回由MATCH命令返回的所有行的平均值 |
举例:
MATCH (p:Person)
RETURN MAX(p.money),SUM(p.money)
关系函数
功能|描述
STARTNODE|它用于知道关系的开始节点
ENDNODE|它用于知道关系的结束节点
ID|它用于知道关系的ID
TYPE|它用于知道字符串标示的一个关系的TYPE
MATCH p = (:Person {name:"林婉儿"}) - [r:Couple]-(:Person)
RETURN STARTNODE(r)
shortestPath函数返回最短的path
MATCH p = shortestPath((node1)-[*]-(node2))
RETURN length(p),nodes(p)
举例:
MATCH p = shortestPath((p1:Person {name:'王启年'})-[*]-(p2:Person{name:'九品射手燕小乙'}))
RETURN length(p),nodes(p)
CQL多深度关系节点
使用with关键字
查询三层级关系如下:with可以将前面查询结果作为后面的查询条件
match (na:Person)-[re]->(nb:Person) where na.name='范闲' with na,re,nb match(nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc
match (na:Person)-[re]->(nb:Person) where na.name="林婉儿" WITH na,re,nb match (nb:Person)-
[re2]->(nc:Person) return na,re,nb,re2,nc
match (na:Person)-[re]-(nb:Person) where na.name="林婉儿" WITH na,re,nb match (nb:Person)-
[re2]->(nc:Person) return na,re,nb,re2,nc
直接拼接关系节点查询
match (na:Person{name:"范闲"})-[re]->(nb:Person)-[re2]->(nc:Person) return na,re,nb,re2,nc
为了方便,可以将查询结果赋值给变量,然后返回:
match data = (na:Person{name:'范闲'})-[re]->(nb:Person)-[re2]->(nc:Person) return data
使用深度运算符
当实现多深度关系节点查询时,显然使用以上方式比较繁琐。
可变数量的关系->节点可以使用-[:TYPE*minHops…maxHops]。
查询:
match data = (na:Person{name:'范闲'})-[*1..2]-(nb:Person) return data
事务
为了保持数据的完整性和保证良好的事务行为,Neo4j也支持ACID特性。
注意:
- 所有对Neo4j数据库的修改操作都封装在事务里面。
- 默认的isolation level是READ_COMMITTED。
- 死锁保护已经内置到核心事务关系。(Neo4j会在死锁发生之前检测死锁并抛出异常。在异常抛出之前,事务会被标志为回滚。当事务结束时,事务会释放它所持有的锁,则该事务的锁所引起的死锁也是就是解除,其他事务就可以继续执行。当用户需要时,抛出异常的事务可以尝试重新执行。)
- 除特别说明,Neo4j的API的操作都是线程安全的,Neo4j数据库的操作也就没有必要使用额外的同步方法。
索引
简介
Neo4j CQL支持节点或关系实行上的索引,以提高应用程序的性能。
可以为具有相同标签名称的属性上创建索引。
可以在MATCH或者WHERE等运算符上使用这些索引列来改进CQL的执行。
创建单一索引
CREATE INDEX ON:Label(property)
例如:
CREATE INDEX ON :Person(name)
创建复合索引
CREATE INDEX ON :Person(age,gender)
全文模式索引
之前的常规模式索引只能对字符串进行精确匹配或者前后缀(startswith,endswith,contains),全文索引将标记化索引字符串值,因此它可以匹配字符串中任何位置的术语。索引字符串如何被标记化并分解为术语,取决于配置全文模式索引的分析器。索引是通过属性来创建,便于快速查找节点或者关系。
创建和配置全文模式索引
使用db.index.fulltext.createNodeIndex和db.index.fulltext.createRelationshipIndedx创建全文模式索引。在创建索引时,每个索引必须为每个索引指定一个唯一的名称,用于在查询或删除索引时引用相关的特定索引。然后,全文模式索引分别应用于标签列表或关系类型列表,分别用于节点和关系索引,然后应用与属性名称列表。
call db.index.fulltext.createNodeIndex('索引名', [Label, Label],[属性,属性])
call db.index.fulltext.createNodeIndedx('nameAndDescription'. ['Person',['name', 'description']])
call db.index.fulltext.queryNodes('nameAndDescription','范闲') YIELD node, score RETURN node.name, node.dexcription, score
查看和删除索引
call db.indexes 或者:schema
DROP INDEX ON:Person(name)
DROP INDEX ON:Person(age, gender)
call db.index.fulltext.drop(‘nameAndDescription’)
约束
唯一约束
作用
- 避免重复记录
- 强制执行数据完整性规则
创建唯一约束
CREATE CONSTRAINT ON(变量:<label_name>) ASSERT 变量<property_name> IS UNIQUE
具体实例:
CREATE CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
删除唯一性约束
DROP CONSTRAINT ON (p:Person) ASSERT p.name IS UNIQUE
属性存在约束(企业版中可用)
CREATE CONSTRAINT ON (p:Person) ASSERT exists(p.name)
查看约束
call db.constraints:schema

795

被折叠的 条评论
为什么被折叠?



