5. MongoDB 集合创建、更新、删除

1. 创建集合

1.1 语法

db.createCollection(name, options)

参数说明:

  • name: 要创建的集合名称。
  • options: 可选参数, 指定有关内存大小及索引的选项。

options 可以是如下参数:

参数名类型描述示例值
capped布尔值是否创建一个固定大小的集合。true
size数值集合的最大大小(以字节为单位)。仅在 capped 为 true 时有效。10485760 (10MB)
max数值集合中允许的最大文档数。仅在 capped 为 true 时有效。5000
validator对象用于文档验证的表达式。{ $jsonSchema: { ... }}
validationLevel字符串指定文档验证的严格程度。<br>"off":不进行验证。<br>"strict":插入和更新操作都必须通过验证(默认)。<br>"moderate":仅现有文档更新时必须通过验证,插入新文档时不需要。"strict"
validationAction字符串指定文档验证失败时的操作。<br>"error":阻止插入或更新(默认)。<br>"warn":允许插入或更新,但会发出警告。"error"
storageEngine对象为集合指定存储引擎配置。{ wiredTiger: { ... }}
collation对象指定集合的默认排序规则。{ locale: "en", strength: 2 }

下面是带有几个关键参数的 createCollection() 的用法:

1.1.1 创建了一个固定大小的集合,最大大小为 5MB(5242880 字节),最多存储 5000 个文档。

mongodb.createCollection("myCappedCollection", { capped: true, size: 5242880, max: 5000});

!! 在插入文档时,MongoDB 首先检查固定集合的 size 字段,然后检查 max 字段。!!

1.1.2 在 MongoDB 中,你不需要创建集合,当你插入一些文档时,MongoDB 会自动创建集合。

>  db.mycol2.insert({"name" : "菜鸟教程"})

>  show collections

mycol2

...

1.1.3 创建了一个最大大小为 1MB(1048576 字节)的固定大小集合:

db.createCollection("myCappedCollection", { capped: true, size: 1048576 });

1.2 实例

db.createCollection("myComplexCollection", {
    capped: true,
    size: 10485760,
    max: 5000,
    validator: { $jsonSchema: {
        bsonType: "object"
        required: ["name", "email", "age"],
        properties: {
            name: {
                bsonType: "string",
                description: "必须为字符串且为必填项"
            },
            email: {
                bsonType: "string",
                pattern: "^.+@.+$",
                description: "必须为有效的电子邮件地址"
            }
            age: {
                bsonType: "int",
                minimum: 0,
                description: "必须为整数且为必填项"
        }    
    }},
    validationLevel: "strict",
    validationAction: "error",
    storageEngine: {
        wiredTiger: { configString: "block_compressor=zstd" }
    },
    collation: { locale: "en", strength: 3 }
});

以上这个例子:

  •  固定大小,最大10MB,最多存储5000个文档。
  • 文档必须包含name、email、age字段,其中name必须是字符串,email必须是有效的电子邮件格式,age必须是非负整数。
  • 验证级别为严格,验证失败将阻止插入或更新。
  • 使用WiredTiger存储引擎,指定块压缩器为zstd。
  • 默认使用英语排序规则。

2. 更新集合名

在MongoDB中,不能直接通过命令来重命名集合。

MongoDB可以使用renameCollection方法来重命名。 renameCollection方法在MongoDB的admin数据库中运行,可以将一个集合重命名为另一个名称。

2.1 renameCollection语法

db.adminCommand({
    renameCollection: "sourceDb.sourceCollection",
    to: "targetDb.targetCollection",
    dropTarget: <boolean>
})

参数说明:

  • renameCollection:要重命名的集合的完全限定名称(包括数据库名)
  • to:目标集合的完全限定名称(包括数据库名)
  • dropTarget(可选):布尔值。如果目标集合已经存在,是否删除目标集合。默认值为false。 

2.2 实例

将test数据库中的oldcollection重命名为newCollection:

1. 确保连接到test数据库
use test

2. 运行renameCollection命令
db.adminCommand({
    renameCollection: "test.oldCollection",
    to: "test.newCollection"
});
如果要将集合重命名为另一个数据库,如将test数据库中的oldCollection重命名为production数据库中的newCollection
db.adminCommand({
    renameCollection: "test.oldCollection",
    to: "production.newCollection"
});

注意事项

  • 权限要求:执行renameCollection命令需要具有对源数据库和目标数据库的适当权限。通常需要dbAdmin或dbOwner角色。
  • 目标集合不存在:目标集合不能已经存在。如果目标集合存在,则会返回错误。
  • 索引和数据:重命名集合会保留所有文档和索引。

2.3 处理重命名失败的情况

如果重命名过程中发生错误,可以根据错误消息采取相应的措施。如,如果目标集合已经存在,可以先删除目标集合(如果确认不需要),然后重新执行重命名操作:

use production
db.newCollection.drop();

use test
db.adminCommand({ 
  renameCollection: "test.oldCollection", 
  to: "production.newCollection" 
});

通过 renameCollection 方法,你可以有效地管理 MongoDB 集合的名称,确保数据库结构符合应用需求。

3. 删除集合

MongoDB 中使用 drop() 方法来删除集合。

drop() 方法可以永久地从数据库中删除指定的集合及其所有文档,这是一个不可逆的操作,因此需要谨慎使用。

3.1 语法

db.collection.drop()

返回值:如果成功删除选定集合,则drop()方法返回true,否则返回false。

3.2 实例

在数据库 mydb 中,我们可以先通过 show collections 命令查看已存在的集合:
>use mydb
switched to db mydb
>show collections
mycol
mycol2
system.indexes
runoob
>

接着删除集合 mycol2 :
>db.mycol2.drop()
true
>

通过 show collections 再次查看数据库 mydb 中的集合:
>show collections
mycol
system.indexes
runoob
>

从结果中可以看出 mycol2 集合已被删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值