Apache AGE 运算符

运算符

字符串特定比较运算符

测试数据

SELECT * FROM cypher('graph_name', $$
CREATE (:Person {name: 'John'}),
       (:Person {name: 'Jeff'}),
       (:Person {name: 'Joan'}),
       (:Person {name: 'Bill'})
$$) AS (result agtype);

Starts With

对字符串执行区分大小写的前缀搜索。

SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name STARTS WITH "J"
	RETURN v.name
$$) AS (names agtype);

结果

names
"John"
"Jeff"
"Joan"
3 rows

Contains

对字符串执行区分大小写的包含搜索。

SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name CONTAINS "o"
	RETURN v.name
$$) AS (names agtype);

结果

names
"John"
"Joan"
2 rows

Ends With

对字符串执行区分大小写的后缀搜索。

SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name ENDS WITH "n"
	RETURN v.name
$$) AS (names agtype);

结果

names
"John"
"Joan"
2 rows

正则表达式

AGE支持使用=~运算符的POSIX正则表达式。默认情况下,=~区分大小写。

基本字符串匹配

当没有给出特殊字符时,=~运算符的行为类似于=运算符。

SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name =~ 'John'
	RETURN v.name
$$) AS (names agtype);

结果

sqlCopy code
names
"John"
1 row

不区分大小写搜索

在字符串的开头添加(?i)将使比较不区分大小写。

sqlCopy code
SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name =~ '(?i)JoHn'
	RETURN v.name
$$) AS (names agtype);

结果

sqlCopy code
names
"John"
1 row

.通配符

.运算符作为通配符,匹配任何单个字符。

sqlCopy code
SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name =~ 'Jo.n'
	RETURN v.name
$$) AS (names agtype);

结果

sqlCopy code
names
"John"
"Joan"
2 rows

*通配符

字符后的*通配符将匹配前一个字符的0个或更多个。

sqlCopy code
SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name =~ 'Johz*n'
	RETURN v.name
$$) AS (names agtype);

结果

sqlCopy code
names
"John"
1 row

+运算符

+运算符将匹配前一个字符的1个或更多个。

sqlCopy code
SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name =~ 'Bil+'
	RETURN v.name
$$) AS (names agtype);

结果

sqlCopy code
names
"Bill"
1 row

.和*通配符结合在一起

您可以将.和*通配符结合在一起表示字符串的其余部分。

sqlCopy code
SELECT * FROM cypher('graph_name', $$
	MATCH (v:Person)
	WHERE v.name =~ 'J.*'
	RETURN v.name
$$) AS (names agtype);

结果

sqlCopy code
names
"John"
"Jeff"
"Joan"
2 rows

运算符优先级

AGE中的运算符优先级如下所示:

优先级运算符
1.属性访问
2[]映射和列表下标
()函数调用
3STARTS WITH字符串的区分大小写前缀搜索
ENDS WITH字符串的区分大小写后缀搜索
CONTAINS字符串的区分大小写包含搜索
=~正则表达式字符串匹配
4-一元减号
5IN检查列表中是否存在元素
IS NULL检查值是否为NULL
IS NOT NULL检查值是否不为NULL
6^指数运算
7* / %乘法,除法和取余
8+ -加法和减法
9= <>用于关系=和≠的关系
< <=用于关系<和≤的关系
> >=用于关系>和≥的关系
10NOT逻辑非
11AND逻辑于
12OR逻辑或

 使用公有云服务

一些公有云的提供了免安装的数据库服务,无需自己部署。以MemFireCloud为例

直接连接

每个MemFire Cloud应用内置一个完整的Postgres数据库,你可以使用任何支持Postgres的工具来连接到数据库。你可以在控制台内的数据库设置中获取连接信息:

  1. 来到左侧菜单栏的 设置部分
  2. 点击数据库
  3. 启用数据库直连
  4. 找到应用的连接信息

开启直连

白名单

MemFire Cloud内置白名单功能,开启白名单后,只允许白名单内的IP地址段访问你的数据库。关闭白名单后,访问你数据库的IP地址不受限制,即任何IP地址只要有连接信息都可以与你的数据库进行直连。 在进行白名单配置时,要遵循CIDR规则。MemFire Cloud中白名单功能 默认是关闭的,需用户手动开启。

配置白名单

通过数据库客户端连接数据库,可以执行图操作

CREATE EXTENSION age;
LOAD 'age';
SET search_path = ag_catalog, "$user", public;

Exception in thread "main" org.springframework.jdbc.BadSqlGrammarException: ### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-vip(id,name,card_number,birth) values(null,'jack','123','1999-1-1')' at line 1 ### The error may exist in file [D:\work\code\demo-011\target\classes\mapper\VipMapper.xml] ### The error may involve com.li.demo011.repository.VipMapper.insert-Inline ### The error occurred while setting parameters ### SQL: insert into t-vip(id,name,card_number,birth) values(null,?,?,?) ### Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-vip(id,name,card_number,birth) values(null,'jack','123','1999-1-1')' at line 1 ; bad SQL grammar [] at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.doTranslate(SQLErrorCodeSQLExceptionTranslator.java:246) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:107) at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:93) at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:347) at jdk.proxy2/jdk.proxy2.$Proxy47.insert(Unknown Source) at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:224) at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:62) at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:141) at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) at jdk.proxy2/jdk.proxy2.$Proxy48.insert(Unknown Source) at com.li.demo011.service.VipServiceImpl.save(VipServiceImpl.java:17) at com.li.demo011.Demo011Application.main(Demo011Application.java:18) Caused by: java.sql
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值