集合操作 #
一、集合概述 #
集合(Collection)是存储文档的容器,类似于关系数据库中的表。ArangoDB支持两种类型的集合:
1.1 集合类型 #
| 类型 | 说明 | 用途 |
|---|---|---|
| Document Collection | 文档集合 | 存储普通文档数据 |
| Edge Collection | 边集合 | 存储图关系(边) |
1.2 集合结构 #
text
Database(数据库)
├── users(文档集合)
│ ├── { _key: "1", name: "张三" }
│ └── { _key: "2", name: "李四" }
├── products(文档集合)
│ └── { _key: "p1", name: "商品A" }
└── purchased(边集合)
└── { _from: "users/1", _to: "products/p1" }
二、创建集合 #
2.1 Web界面创建 #
- 选择数据库
- 点击 “COLLECTIONS”
- 点击 “Add Collection”
- 输入集合名称
- 选择类型(Document 或 Edge)
- 点击 “Create”
2.2 AQL创建 #
aql
CREATE COLLECTION users
2.3 JavaScript创建 #
javascript
db._create("users");
2.4 创建边集合 #
javascript
db._createEdgeCollection("follows");
2.5 带选项创建 #
javascript
db._create("users", {
waitForSync: true,
journalSize: 10485760,
replicationFactor: 2
});
2.6 创建带Schema的集合 #
javascript
db._create("users", {
schema: {
rule: {
type: "object",
properties: {
name: { type: "string" },
email: { type: "string", format: "email" },
age: { type: "number", minimum: 0 }
},
required: ["name", "email"]
},
level: "strict"
}
});
三、查看集合 #
3.1 查看所有集合 #
javascript
db._collections();
3.2 查看非系统集合 #
javascript
db._collections().filter(c => !c.properties().isSystem);
3.3 查看集合属性 #
javascript
db.users.properties();
输出示例:
json
{
"id": "123",
"name": "users",
"waitForSync": false,
"journalSize": 10485760,
"isSystem": false,
"isVolatile": false,
"type": 2,
"replicationFactor": 1
}
3.4 查看集合统计 #
javascript
db.users.figures();
输出示例:
json
{
"alive": {
"count": 1000,
"size": 102400
},
"dead": {
"count": 50,
"size": 5120
}
}
3.5 查看集合数量 #
javascript
db.users.count();
四、修改集合 #
4.1 重命名集合 #
javascript
db.users.rename("customers");
4.2 修改属性 #
javascript
db.users.properties({
waitForSync: true
});
4.3 修改复制因子(集群) #
javascript
db.users.properties({
replicationFactor: 3
});
4.4 修改写关注 #
javascript
db.users.properties({
writeConcern: 2
});
4.5 更新Schema #
javascript
db.users.properties({
schema: {
rule: {
type: "object",
properties: {
name: { type: "string" },
email: { type: "string" },
age: { type: "number" },
phone: { type: "string" }
},
required: ["name", "email"]
},
level: "moderate"
}
});
五、删除集合 #
5.1 AQL删除 #
aql
DROP COLLECTION users
5.2 JavaScript删除 #
javascript
db._drop("users");
5.3 删除系统集合 #
javascript
db._drop("_mySystemCollection", true);
5.4 删除前检查 #
javascript
if (db._collection("users") !== null) {
db._drop("users");
print("集合已删除");
}
5.5 清空集合 #
aql
FOR doc IN users
REMOVE doc IN users
更高效的方式:
javascript
db.users.truncate();
六、集合选项详解 #
6.1 waitForSync #
是否等待数据写入磁盘:
javascript
db._create("users", {
waitForSync: true
});
| 值 | 说明 |
|---|---|
| true | 每次写入等待磁盘同步 |
| false | 异步写入(默认) |
6.2 journalSize #
日志文件大小:
javascript
db._create("users", {
journalSize: 33554432
});
6.3 replicationFactor #
复制因子(集群模式):
javascript
db._create("users", {
replicationFactor: 3
});
6.4 writeConcern #
写关注(集群模式):
javascript
db._create("users", {
writeConcern: 2
});
6.5 shardingStrategy #
分片策略:
javascript
db._create("users", {
numberOfShards: 4,
shardKeys: ["city"]
});
6.6 isVolatile #
是否为内存集合:
javascript
db._create("temp_data", {
isVolatile: true
});
6.7 完整选项示例 #
javascript
db._create("orders", {
waitForSync: false,
journalSize: 33554432,
replicationFactor: 3,
writeConcern: 2,
numberOfShards: 4,
shardKeys: ["userId"],
isVolatile: false
});
七、Schema验证 #
7.1 Schema级别 #
| 级别 | 说明 |
|---|---|
| none | 不验证 |
| moderate | 仅验证存在的字段 |
| strict | 严格验证所有字段 |
7.2 创建带Schema的集合 #
javascript
db._create("products", {
schema: {
rule: {
type: "object",
properties: {
name: { type: "string", minLength: 1 },
price: { type: "number", minimum: 0 },
category: {
type: "string",
enum: ["电子产品", "服装", "食品"]
},
tags: {
type: "array",
items: { type: "string" }
}
},
required: ["name", "price"]
},
level: "strict"
}
});
7.3 验证示例 #
有效文档:
json
{
"name": "iPhone 15",
"price": 7999,
"category": "电子产品",
"tags": ["手机", "苹果"]
}
无效文档(会报错):
json
{
"name": "iPhone 15",
"price": -100
}
7.4 移除Schema #
javascript
db.products.properties({
schema: null
});
八、边集合详解 #
8.1 创建边集合 #
javascript
db._createEdgeCollection("follows");
8.2 边文档结构 #
json
{
"_key": "follow_001",
"_from": "users/user_001",
"_to": "users/user_002",
"createdAt": "2024-01-15T10:30:00Z"
}
8.3 插入边文档 #
aql
INSERT {
_from: "users/user_001",
_to: "users/user_002",
createdAt: DATE_NOW()
} INTO follows
8.4 边集合选项 #
javascript
db._createEdgeCollection("follows", {
replicationFactor: 2,
numberOfShards: 4
});
九、集合索引 #
9.1 查看索引 #
javascript
db.users.getIndexes();
9.2 创建索引 #
javascript
db.users.ensureHashIndex(["email"]);
db.users.ensureSkipList(["age"]);
db.users.ensureFulltextIndex(["description"]);
9.3 删除索引 #
javascript
db.users.dropIndex("idx_123");
十、实战示例 #
10.1 创建用户系统集合 #
javascript
db._create("users", {
schema: {
rule: {
type: "object",
properties: {
username: { type: "string", minLength: 3 },
email: { type: "string", format: "email" },
password: { type: "string", minLength: 8 },
age: { type: "number", minimum: 0 },
isActive: { type: "boolean" }
},
required: ["username", "email", "password"]
},
level: "strict"
}
});
db.users.ensureHashIndex(["email"], { unique: true });
db.users.ensureHashIndex(["username"], { unique: true });
10.2 创建社交网络集合 #
javascript
db._create("users");
db._create("posts");
db._create("comments");
db._createEdgeCollection("follows");
db._createEdgeCollection("likes");
db._createEdgeCollection("comment_on");
10.3 创建电商系统集合 #
javascript
db._create("products", {
schema: {
rule: {
type: "object",
properties: {
name: { type: "string" },
price: { type: "number", minimum: 0 },
stock: { type: "integer", minimum: 0 },
category: { type: "string" }
},
required: ["name", "price"]
}
}
});
db._create("customers");
db._create("orders");
db._createEdgeCollection("ordered");
db._createEdgeCollection("contains");
db.products.ensureSkipList(["price"]);
db.products.ensureHashIndex(["category"]);
十一、常见问题 #
11.1 集合名称限制 #
text
命名规则:
├── 只能包含字母、数字、下划线
├── 必须以字母开头
├── 长度限制:1-256个字符
├── 区分大小写
└── 系统集合以 _ 开头
11.2 集合数量限制 #
text
建议:
├── 单数据库:不超过1000个集合
├── 单实例:总集合数不超过10000个
└── 集群:根据分片规划
11.3 Schema验证失败 #
javascript
try {
db.products.insert({
name: "Product",
price: -100
});
} catch (e) {
print("验证失败: " + e.message);
}
十二、总结 #
集合操作要点:
- 创建:db._create() 创建文档集合
- 边集合:db._createEdgeCollection() 创建边集合
- 属性:properties() 查看/修改属性
- 删除:db._drop() 删除集合
- 清空:truncate() 清空数据
- Schema:使用JSON Schema验证数据
下一步,让我们学习文档操作!
最后更新:2026-03-27