ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

arangoDB之AQL语句常用操作

2022-02-20 21:04:52  阅读:389  来源: 互联网

标签:语句 users arangoDB 查询 关键字 文档 NEW AQL name


官网

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。 UPDATEREPLACE并且UPSERT可以指。

通常跟在retrun后面。 比如我们更新了某些文档,那么可以使用return NEW查看有更新的文档,并显示文档的全部内容

如果没有return 等参数的话,update等关键字是没有返回具体值的.在同一个查询语句中,可以同时返回NEW 和OLD;也可以只返回NEW或OLD的某个属性。Eg: NEW. TypeCode

 

 

 

 

Filter

过滤数据

如果使用多个FILTER语句,它们的结果将与逻辑 AND 组合,这意味着所有过滤条件必须为真才能包含一个元素。

 

 

 

Limit

限制返回的条数,可选地跳过元素(分页)

 

 

如果limit后面是两个参数,那么第一个个参数表示从第几条开始,第二个参数表示取几条,类似分页的效果

 

 

 

 

LET

LET 关键字是为变量分配任意值,变量名在同一查询应该保持唯一。

主要用于声明复杂的计算并避免在查询的多个部分重复计算相同的值。

变量名称中允许的字符是字母ato z(小写和大写)、数字0to 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

 

 

 

?代表否则。

 

 

 

 

 

 

标签:语句,users,arangoDB,查询,关键字,文档,NEW,AQL,name
来源: https://www.cnblogs.com/mumu-lin/p/15679170.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有