AQL核心操作指南:集合创建+文档增删改查(含批量操作)
上一篇我们完成了ArangoDB的环境配置,也认识了《权力的游戏》数据集。这篇就进入实操环节——AQL最核心的“文档管理”操作,从“创建集合”这个前提开始,一步步教你用AQL实现文档的增、删、改、查,不管是单条操作还是批量处理,都能帮你搞明白。
一、前提:先创建集合——文档的“存储容器”
在ArangoDB里,文档不能直接存,得先有“集合”(Collection)——就像装文件要先有文件夹一样。而且要注意,AQL本身不能创建集合,必须通过其他工具操作,我们这里用最直观的Web界面来创建。
1. 为什么必须先创集合?
集合是ArangoDB中存储文档的基本单元,每个集合对应一类数据(比如我们要存角色数据,就建一个“Characters”集合)。如果没创集合直接插文档,会报“集合不存在”的错误,所以这一步是所有文档操作的基础。
2. Web界面创建“Characters”集合(以角色集合为例)
我们以存储角色数据的“Characters”集合为例,一步步走:
-
打开Web界面并登录:用之前保存的链接(https://tutorials.arangodb.cloud:8529/)登录,输入数据库名称、用户名和密码;
-
选择数据库:系统里只有一个可用数据库,直接点击进入;
-
进入集合管理页:在顶部导航栏找到“COLLECTIONS”,点击进入(这里会显示所有已创建的集合,刚登录时应该是空的);
-
创建新集合:点击页面中的“Add Collection”按钮,弹出配置框后:
- 输入集合名称:Characters(要和后续操作的集合名对应,不能错);
- 分片数量:设置为3(按课程推荐配置,保证数据存储均衡);
- 点击“Save”确认;

-
验证结果:创建完成后,“Characters”会出现在集合列表里,说明容器已经准备好,可以存文档了。

二、AQL创建文档:用INSERT语句添加数据
文档是ArangoDB的核心数据单元(类似JSON格式),添加文档用INSERT语句,支持单条插入和批量插入两种场景。
1. 单文档插入:添加单个角色
比如我们要插入“Ned Stark”这个角色,操作很简单:
- 打开AQL编辑器:在Web界面顶部找到“QUERIES”,点击进入后,会看到一个空白的代码编辑框;
- 输入AQL语句:
INSERT {
"name": "Ned",
"surname": "Stark",
"alive": true,
"age": 41,
"traits": ["A","H","C","N","P"]
} INTO Characters
- 语句解析:
INSERT:表示“插入文档”的关键字;- 大括号里的内容:是要插入的文档(类似JSON,包含角色的姓名、存活状态、年龄、特征等属性);
INTO Characters:指定要插入的集合是“Characters”;
- 执行与验证:点击编辑器下方的“Submit”按钮,执行后如果响应结果是
[ ],就说明插入成功了(ArangoDB插入成功时默认不返回文档内容,只返回空数组)。

2. 多文档批量插入:一次加多个角色
如果要插入多个角色(比如Robert、Jaime等),一个个插太麻烦,用LET定义数据变量+FOR循环就能批量处理:
- AQL语句示例:
LET data = [
{ "name": "Robert", "surname": "Baratheon", "alive": false, "traits": ["A","H","C"] },
{ "name": "Jaime", "surname": "Lannister", "alive": true, "age": 36, "traits": ["A","F","B"] },
// 这里省略其他角色数据,实际使用时可补充完整41个角色对象
{ "name": "The High Sparrow", "alive": true, "traits": ["H","M","F","O"] }
]
FOR d IN data
INSERT d INTO Characters
- 语句解析:
LET data = [...]:用LET定义一个叫data的变量,里面存一个“角色文档数组”,每个元素都是一个角色;FOR d IN data:用FOR循环遍历data数组,每次把一个角色文档赋值给变量d;INSERT d INTO Characters:循环执行插入,把每个d(角色文档)插入到Characters集合;
- 执行结果:同样,响应显示
[ ]就代表所有角色都批量插入成功了。

三、AQL读取文档:用FOR或DOCUMENT()查数据
插入文档后,怎么验证数据是否存在?这就需要“读取文档”,AQL支持“查所有文档”和“查指定文档”两种常见场景。
1. 读取集合所有文档:看全量数据
如果想查看Characters集合里所有角色,用FOR循环遍历+RETURN返回即可:
- AQL语句:
FOR c IN Characters
RETURN c
- 语句解析:
FOR c IN Characters:c是自定义变量(代表集合里的单个角色文档),这句话意思是“遍历Characters里的每一个文档,把文档赋值给c”;RETURN c:把遍历到的每个文档(c)作为结果返回;
- 查询结果:会显示所有已插入的角色文档,除了我们自己定义的
name、age等属性,还会有系统自动添加的3个属性:_key:文档在集合内的唯一标识(比如“2861650”,每个人的环境里这个值不一样);_id:文档在整个数据库内的唯一标识(格式是“集合名/_key”,比如“Characters/2861650”);_rev:文档的版本号(用于版本控制,每次修改都会变)。
2. 读取指定文档:精准查单个/多个角色
如果只想查某一个角色(比如Ned Stark),用DOCUMENT()函数更高效,需要知道文档的_key或_id(可以从“查所有文档”的结果里找到)。
(1)查单个指定文档
有两种写法,效果一样:
- 方式1:用“集合名+_key”(推荐,更直观):
// 注意:2861650是示例_key,要换成你自己环境里Ned的_key
RETURN DOCUMENT("Characters", "2861650")
- 方式2:用完整_id:
// _id格式是“集合名/_key”,同样要换你自己的_id
RETURN DOCUMENT("Characters/2861650")
- 结果示例:会返回Ned的完整文档,像这样:
[
{
"_key": "2861650",
"_id": "Characters/2861650",
"_rev": "_V1bzsXa---",
"name": "Ned",
"surname": "Stark",
"alive": true,
"age": 41,
"traits": ["A","H","C","N","P"]
}
]
(2)一次性查多个指定文档
如果要同时查Ned和Catelyn,只需把_key或_id改成数组:
// 用“集合名+_key数组”,换成你自己的两个_key
RETURN DOCUMENT("Characters", ["2861650", "2861653"])
- 结果:会以数组形式返回两个角色的文档,方便批量查看。

四、AQL更新文档:用UPDATE或REPLACE改数据
数据插入后难免要修改,AQL提供两种更新方式:UPDATE(改部分属性)和REPLACE(全文档替换),按需选择。
1. UPDATE:只改部分属性(推荐)
如果只想改角色的某个属性(比如把Ned的存活状态从true改成false),用UPDATE最方便,不会影响其他属性:
- AQL语句:
// 2861650换成你自己Ned的_key
UPDATE "2861650" WITH { alive: false } IN Characters
- 语句解析:
UPDATE "2861650":指定要更新的文档(通过_key定位);WITH { alive: false }:只改alive属性,其他属性不变;IN Characters:指定要更新的集合;
- 效果:执行后,Ned的
alive变成false,name、age等其他属性还在;如果要加新属性(比如加“season: 1”),直接在WITH里加即可:WITH { alive: false, season: 1 }。
2. REPLACE:全文档替换(谨慎用)
如果要彻底修改文档内容(比如重新整理Ned的所有属性),用REPLACE,但要注意:必须包含所有核心属性,否则会丢失原属性:
- AQL语句:
// 2861650换成你自己的_key,WITH里要包含所有必要属性
REPLACE "2861650" WITH {
"name": "Ned",
"surname": "Stark",
"alive": false,
"age": 41,
"traits": ["A","H","C","N","P"]
} IN Characters
- 注意事项:如果WITH里少写了
age,执行后Ned的age属性就会被删除,只保留写了的属性;系统属性(_key、_id、_rev)会自动保留,不用写。
3. 批量更新:给所有角色加共同属性
如果要给Characters里所有角色加“season: 1”(表示都来自第一季),用FOR循环+UPDATE就能批量处理:
FOR c IN Characters
UPDATE c WITH { season: 1 } IN Characters
- 解析:
FOR c IN Characters遍历所有角色,UPDATE c表示更新当前角色,WITH { season: 1 }给每个角色加新属性,执行后所有角色都会有season: 1。
五、AQL删除文档:用REMOVE删数据
如果要删除不需要的文档,用REMOVE语句,同样支持单条删除和批量删除,但要注意:删除是永久的,没法直接恢复,一定要确认好再执行。
1. 单个文档删除:删指定角色
比如要删除Ned的文档,通过_key定位:
// 2861650换成你自己Ned的_key
REMOVE "2861650" IN Characters
- 执行结果:响应
[ ]表示删除成功,再查所有文档就看不到Ned了。
2. 批量删除:清空整个集合
如果要删除Characters里所有角色(比如重置数据),用FOR循环+REMOVE:
FOR c IN Characters
REMOVE c IN Characters
- 效果:遍历所有角色并逐个删除,执行后Characters集合会变成空的;如果删错了,只能重新执行之前的“批量插入”语句恢复数据。
六、小结
这篇我们把AQL文档管理的核心操作都过了一遍,总结几个关键要点:
- 所有文档操作的前提是“先创集合”,Web界面创建时要注意集合名和分片数;
- 插入用
INSERT(单条直接插,批量用LET+FOR); - 读取用
FOR+RETURN(查所有)或DOCUMENT()(查指定); - 更新用
UPDATE(改部分,推荐)或REPLACE(全替换,谨慎); - 删除用
REMOVE(永久操作,确认后再执行)。
这些操作是AQL的“基本功”,后续复杂查询都基于这些基础。下一篇我们会进阶——教你用FILTER做精准筛选、SORT排序、LIMIT控制结果数量,让查询更高效!

2816

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



