AQL核心操作指南:集合创建+文档增删改查(含批量操作)

AQL核心操作指南:集合创建+文档增删改查(含批量操作)

上一篇我们完成了ArangoDB的环境配置,也认识了《权力的游戏》数据集。这篇就进入实操环节——AQL最核心的“文档管理”操作,从“创建集合”这个前提开始,一步步教你用AQL实现文档的增、删、改、查,不管是单条操作还是批量处理,都能帮你搞明白。

一、前提:先创建集合——文档的“存储容器”

在ArangoDB里,文档不能直接存,得先有“集合”(Collection)——就像装文件要先有文件夹一样。而且要注意,AQL本身不能创建集合,必须通过其他工具操作,我们这里用最直观的Web界面来创建。

1. 为什么必须先创集合?

集合是ArangoDB中存储文档的基本单元,每个集合对应一类数据(比如我们要存角色数据,就建一个“Characters”集合)。如果没创集合直接插文档,会报“集合不存在”的错误,所以这一步是所有文档操作的基础。

2. Web界面创建“Characters”集合(以角色集合为例)

我们以存储角色数据的“Characters”集合为例,一步步走:

  1. 打开Web界面并登录:用之前保存的链接(https://tutorials.arangodb.cloud:8529/)登录,输入数据库名称、用户名和密码;

  2. 选择数据库:系统里只有一个可用数据库,直接点击进入;

  3. 进入集合管理页:在顶部导航栏找到“COLLECTIONS”,点击进入(这里会显示所有已创建的集合,刚登录时应该是空的);

  4. 创建新集合:点击页面中的“Add Collection”按钮,弹出配置框后:

    • 输入集合名称:Characters(要和后续操作的集合名对应,不能错);
    • 分片数量:设置为3(按课程推荐配置,保证数据存储均衡);
    • 点击“Save”确认;
  5. 验证结果:创建完成后,“Characters”会出现在集合列表里,说明容器已经准备好,可以存文档了。

二、AQL创建文档:用INSERT语句添加数据

文档是ArangoDB的核心数据单元(类似JSON格式),添加文档用INSERT语句,支持单条插入和批量插入两种场景。

1. 单文档插入:添加单个角色

比如我们要插入“Ned Stark”这个角色,操作很简单:

  1. 打开AQL编辑器:在Web界面顶部找到“QUERIES”,点击进入后,会看到一个空白的代码编辑框;
  2. 输入AQL语句
INSERT {
  "name": "Ned",
  "surname": "Stark",
  "alive": true,
  "age": 41,
  "traits": ["A","H","C","N","P"]
} INTO Characters
  1. 语句解析
    • INSERT:表示“插入文档”的关键字;
    • 大括号里的内容:是要插入的文档(类似JSON,包含角色的姓名、存活状态、年龄、特征等属性);
    • INTO Characters:指定要插入的集合是“Characters”;
  2. 执行与验证:点击编辑器下方的“Submit”按钮,执行后如果响应结果是[ ],就说明插入成功了(ArangoDB插入成功时默认不返回文档内容,只返回空数组)。
    在这里插入图片描述

2. 多文档批量插入:一次加多个角色

如果要插入多个角色(比如Robert、Jaime等),一个个插太麻烦,用LET定义数据变量+FOR循环就能批量处理:

  1. 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
  1. 语句解析
    • LET data = [...]:用LET定义一个叫data的变量,里面存一个“角色文档数组”,每个元素都是一个角色;
    • FOR d IN data:用FOR循环遍历data数组,每次把一个角色文档赋值给变量d
    • INSERT d INTO Characters:循环执行插入,把每个d(角色文档)插入到Characters集合;
  2. 执行结果:同样,响应显示[ ]就代表所有角色都批量插入成功了。
    在这里插入图片描述

三、AQL读取文档:用FOR或DOCUMENT()查数据

插入文档后,怎么验证数据是否存在?这就需要“读取文档”,AQL支持“查所有文档”和“查指定文档”两种常见场景。

1. 读取集合所有文档:看全量数据

如果想查看Characters集合里所有角色,用FOR循环遍历+RETURN返回即可:

  1. AQL语句
FOR c IN Characters
  RETURN c
  1. 语句解析
    • FOR c IN Charactersc是自定义变量(代表集合里的单个角色文档),这句话意思是“遍历Characters里的每一个文档,把文档赋值给c”;
    • RETURN c:把遍历到的每个文档(c)作为结果返回;
  2. 查询结果:会显示所有已插入的角色文档,除了我们自己定义的nameage等属性,还会有系统自动添加的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最方便,不会影响其他属性:

  1. AQL语句
// 2861650换成你自己Ned的_key
UPDATE "2861650" WITH { alive: false } IN Characters
  1. 语句解析
    • UPDATE "2861650":指定要更新的文档(通过_key定位);
    • WITH { alive: false }:只改alive属性,其他属性不变;
    • IN Characters:指定要更新的集合;
  2. 效果:执行后,Ned的alive变成false,nameage等其他属性还在;如果要加新属性(比如加“season: 1”),直接在WITH里加即可:WITH { alive: false, season: 1 }

2. REPLACE:全文档替换(谨慎用)

如果要彻底修改文档内容(比如重新整理Ned的所有属性),用REPLACE,但要注意:必须包含所有核心属性,否则会丢失原属性

  1. AQL语句
// 2861650换成你自己的_key,WITH里要包含所有必要属性
REPLACE "2861650" WITH {
  "name": "Ned",
  "surname": "Stark",
  "alive": false,
  "age": 41,
  "traits": ["A","H","C","N","P"]
} IN Characters
  1. 注意事项:如果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文档管理的核心操作都过了一遍,总结几个关键要点:

  1. 所有文档操作的前提是“先创集合”,Web界面创建时要注意集合名和分片数;
  2. 插入用INSERT(单条直接插,批量用LET+FOR);
  3. 读取用FOR+RETURN(查所有)或DOCUMENT()(查指定);
  4. 更新用UPDATE(改部分,推荐)或REPLACE(全替换,谨慎);
  5. 删除用REMOVE(永久操作,确认后再执行)。

这些操作是AQL的“基本功”,后续复杂查询都基于这些基础。下一篇我们会进阶——教你用FILTER做精准筛选、SORT排序、LIMIT控制结果数量,让查询更高效!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值