官网
https://www.arangodb.com/community-server/sql-aql-comparison/
基础知识
- 单行注释:双斜杠开头
- 多行注释:以正斜杠和星号开头,以星号和后面的正斜杠结尾
- AQL只允许一个单一查询字符串查询; 因此,不允许使用分号来表示一个查询的结束和分隔多个查询
- 关键字不区分大小写,如果名称使用了关键字的名称,则名称必须包含在反引号或正引号中
- 集合不能用"" ''
包裹
- 可以通过点或者[]获取对象的属性,但是方括号内可以嵌套表达式
- 使用 AQL 从数据库中检索数据始终包括RETURN 操作
增删改查
插入新的文档(即单行)
insert {name: “andy”, dender: “m”,} into users
插入查询的文档(在users这个集合中查找到active==1的user,并插入到backup这个集合中)
for user in users
filter user.active ==1
insert user into backup
插入多行
FOR user IN [
{ name: "John Doe", gender: "m" }, { name: "Jane Smith", gender: "f" } ] INSERT user INTO users
生成测试文档(即多行)
for I in 1..1000
insert{
name:concat(“test”, i),
gender:( i%2==0 ? “f”: “m”)
}
Into users
删
REMOVE { _key: '00000000092a06ca' } IN ci
更新部分属性使用update:
当key=1时,更新name为andy
update {_key:’1’}
with {name : ‘andy’}
in users
如果要批量更新符合条件的数据数据时,可以用for遍历所有的文档,并且用filter 关键字过滤出要更新的文档
for i in ci
filter i.typeCode=='ruijieFan'
update i with {manageStatus : 2} in ci
return NEW
全部替换某个文档 replace
FOR i IN 1..1000
REPLACE CONCAT('test', i) WITH { foobar: true } IN users
FOR u IN users
FILTER u.active == false
REPLACE u WITH { status: 'inactive', name: u.name } IN backup
查
使用查询方法时,必须要使用return返回数据
for i in ci
filter i.typeCode=='ruijieFan'
return i
遍历ci集合中的所有文档,返回文档属性typecode=='ruijieFan'的文档
关键字
https://www.arangodb.com/docs/stable/aql/operations.html
NEW,OLD
NEW
指插入或修改的文档修订,OLD
指更新或删除前的文档修订。INSERT
语句只能引用NEW
伪值,REMOVE
操作只能引用OLD
。 UPDATE
,REPLACE
并且UPSERT
可以指。
通常跟在retrun后面。 比如我们更新了某些文档,那么可以使用return NEW查看有更新的文档,并显示文档的全部内容
如果没有return 等参数的话,update等关键字是没有返回具体值的.在同一个查询语句中,可以同时返回NEW 和OLD;也可以只返回NEW或OLD的某个属性。Eg: NEW. TypeCode
Filter
过滤数据
如果使用多个FILTER
语句,它们的结果将与逻辑 AND 组合,这意味着所有过滤条件必须为真才能包含一个元素。
Limit
限制返回的条数,可选地跳过元素(分页)
如果limit后面是两个参数,那么第一个个参数表示从第几条开始,第二个参数表示取几条,类似分页的效果
LET
LET 关键字是为变量分配任意值,变量名在同一查询应该保持唯一。
主要用于声明复杂的计算并避免在查询的多个部分重复计算相同的值。
变量名称中允许的字符是字母a
to z
(小写和大写)、数字0
to 9
、下划线 ( _
) 符号和美元 ( $
) 符号。变量名不能以数字或下划线开头。美元符号只能用作变量名的第一个字符,并且后面必须跟一个字母。
Sort
排序,默认升序排序,可根据关键字asc,desc自定义排序规则,也可以使用一个或多个属性,升序或降序
按 lastName(升序)、firstName(升序)和 id(降序)排序的示例查询:
FOR u IN users
SORT u.lastName, u.firstName, u.id DESC
RETURN u
FOR:遍历集合或视图、数组的所有元素或遍历图形
RETURN:产生查询的结果。
RETURN
语句的结果始终是一个数组
Return后面还可以接着一个DISTINCT关键字,确保返回值的唯一性。Distinct语句仅对挨着的return语句生效
SEARCH:查询 ArangoSearch 视图的(全文)索引
COLLECT:按一个或多个组标准对数组进行分组。也可以计数和聚合。
REMOVE:从集合中删除文档。
REMOVE { _key: '00000000092a06ca' } IN ci
UPDATE:部分更新集合中的文档。
UPDATE document IN collection options
UPDATE keyExpression WITH document IN collection options
使用第一种语法时。Document里必须包含_key属性,否则不知道更新的是哪个文档
REPLACE:完全替换集合中的文档。
REPLACE document IN collection options
REPLACE keyExpression WITH document IN collection options
INSERT:将新文档插入到集合中。
UPSERT:更新/替换现有文档,或者在它不存在的情况下创建它。
WITH:指定查询中使用的集合(仅在查询开始时)
运算符
https://www.arangodb.com/docs/stable/aql/operators.html
FOR doc IN viewName
SEARCH ANALYZER(doc.text == "quick" OR doc.text == "brown", "text_en")
// -- or --
SEARCH ANALYZER(doc.text IN ["quick", "brown"], "text_en")
RETURN doc
?代表否则。