Skip to content

集合操作

创建集合

显式创建

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后台创建
expireAfterSecondsTTL索引
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();

下一步学习