Appearance
集合操作
创建集合
显式创建
javascript
db.createCollection("users");带选项创建
javascript
db.createCollection("logs", {
capped: true,
size: 5242880,
max: 5000,
});创建选项
| 选项 | 说明 |
|---|---|
| capped | 是否为固定集合 |
| size | 固定集合大小(字节) |
| max | 固定集合最大文档数 |
| validator | 文档验证规则 |
| validationLevel | 验证级别 |
| validationAction | 验证行为 |
| storageEngine | 存储引擎选项 |
| collation | 排序规则 |
隐式创建
javascript
db.users.insertOne({ name: "张三" });固定集合 (Capped Collection)
特点
- 固定大小,先进先出
- 高性能插入和查询
- 自动覆盖旧数据
- 不支持删除文档
创建固定集合
javascript
db.createCollection("logs", {
capped: true,
size: 10485760,
max: 10000,
});检查是否为固定集合
javascript
db.logs.isCapped();转换为固定集合
javascript
db.runCommand({
convertToCapped: "users",
size: 10485760,
});文档验证
创建验证规则
javascript
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email"],
properties: {
name: {
bsonType: "string",
description: "必须为字符串",
},
email: {
bsonType: "string",
pattern: "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$",
description: "必须为有效邮箱",
},
age: {
bsonType: "int",
minimum: 0,
maximum: 150,
description: "年龄必须在0-150之间",
},
},
},
},
});验证级别
| 级别 | 说明 |
|---|---|
| off | 关闭验证 |
| strict | 严格验证(默认) |
| moderate | 仅验证有效文档的更新 |
javascript
db.runCommand({
collMod: "users",
validationLevel: "moderate",
});验证行为
| 行为 | 说明 |
|---|---|
| error | 拒绝无效文档(默认) |
| warn | 允许无效文档但发出警告 |
javascript
db.runCommand({
collMod: "users",
validationAction: "warn",
});更新验证规则
javascript
db.runCommand({
collMod: "users",
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name"],
properties: {
name: { bsonType: "string" },
},
},
},
});删除验证规则
javascript
db.runCommand({
collMod: "users",
validator: {},
});查看集合信息
查看所有集合
javascript
show collections
show tables
db.getCollectionNames()查看集合详情
javascript
db.users.stats();
db.users.stats({ scale: 1024 });查看集合选项
javascript
db.users.getCollectionOptions();查看索引
javascript
db.users.getIndexes();修改集合
重命名
javascript
db.users.renameCollection("members");
db.users.renameCollection("members", true);修改集合属性
javascript
db.runCommand({
collMod: "users",
validationLevel: "strict",
});删除集合
删除集合
javascript
db.users.drop();删除所有文档
javascript
db.users.deleteMany({});drop vs deleteMany
| 操作 | 说明 |
|---|---|
| drop() | 删除集合和索引 |
| deleteMany({}) | 仅删除文档,保留索引 |
批量写入操作
bulkWrite
javascript
db.users.bulkWrite([
{
insertOne: {
document: { name: "用户A", age: 25 },
},
},
{
updateOne: {
filter: { name: "张三" },
update: { $set: { age: 26 } },
},
},
{
deleteOne: {
filter: { name: "李四" },
},
},
{
replaceOne: {
filter: { name: "王五" },
replacement: { name: "王五", age: 30 },
},
},
]);批量操作类型
| 操作 | 说明 |
|---|---|
| insertOne | 插入单个文档 |
| updateOne | 更新单个文档 |
| updateMany | 更新多个文档 |
| deleteOne | 删除单个文档 |
| deleteMany | 删除多个文档 |
| replaceOne | 替换单个文档 |
有序与无序执行
javascript
db.users.bulkWrite([...], { ordered: false })索引操作
创建索引
javascript
db.users.createIndex({ name: 1 });
db.users.createIndex({ name: 1, age: -1 });
db.users.createIndex({ email: 1 }, { unique: true });创建索引选项
| 选项 | 说明 |
|---|---|
| unique | 唯一索引 |
| sparse | 稀疏索引 |
| background | 后台创建 |
| expireAfterSeconds | TTL索引 |
| partialFilterExpression | 部分索引 |
| collation | 排序规则 |
查看索引
javascript
db.users.getIndexes();删除索引
javascript
db.users.dropIndex("name_1");
db.users.dropIndex({ name: 1 });
db.users.dropIndexes();排序规则
创建带排序规则的集合
javascript
db.createCollection("users", {
collation: {
locale: "zh",
strength: 2,
},
});排序规则选项
| 选项 | 说明 |
|---|---|
| locale | 语言区域 |
| strength | 比较强度 |
| caseLevel | 大小写级别 |
| caseFirst | 大小写优先 |
| numericOrdering | 数字排序 |
| alternate | 替代处理 |
| maxVariable | 最大变量 |
| normalization | 标准化 |
| backwards | 反向排序 |
strength 级别
| 级别 | 说明 |
|---|---|
| 1 | 忽略大小写和重音 |
| 2 | 忽略大小写 |
| 3 | 区分大小写(默认) |
javascript
db.users.createIndex({ name: 1 }, { collation: { locale: "zh", strength: 2 } });分片集合
启用分片
javascript
sh.enableSharding("mydb");对集合分片
javascript
sh.shardCollection("mydb.users", { _id: "hashed" });
sh.shardCollection("mydb.orders", { user_id: 1 });查看分片状态
javascript
sh.status();
db.users.getShardDistribution();视图
创建视图
javascript
db.createView("activeUsers", "users", [
{ $match: { status: "active" } },
{ $project: { name: 1, email: 1 } },
]);查看视图
javascript
db.activeUsers.find();删除视图
javascript
db.activeUsers.drop();时间序列集合
创建时间序列集合
javascript
db.createCollection("weather", {
timeseries: {
timeField: "timestamp",
metaField: "sensorId",
granularity: "minutes",
},
expireAfterSeconds: 86400,
});时间序列选项
| 选项 | 说明 |
|---|---|
| timeField | 时间字段(必需) |
| metaField | 元数据字段 |
| granularity | 粒度(seconds/minutes/hours) |
| expireAfterSeconds | 过期时间 |
插入数据
javascript
db.weather.insertOne({
timestamp: new Date(),
sensorId: "sensor_001",
temperature: 25.5,
humidity: 60,
});集合统计信息
获取统计
javascript
db.users.stats();
db.users.stats({ scale: 1024 });统计字段说明
| 字段 | 说明 |
|---|---|
| ns | 命名空间 |
| count | 文档数 |
| size | 数据大小 |
| storageSize | 存储大小 |
| totalIndexSize | 索引大小 |
| avgObjSize | 平均文档大小 |
数据大小
javascript
db.users.dataSize();
db.users.storageSize();
db.users.totalIndexSize();
db.users.totalSize();