当前位置: 首页 > news >正文

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 test2. 运行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 集合已被删除。

http://www.lryc.cn/news/425291.html

相关文章:

  • PHP中如何将变量从函数传递给acf_add_filter
  • KNN算法的使用
  • java文件上传
  • MySQL 数据库经验总结
  • Python环境安装及PIP安装(Mac OS版)
  • 2024自动驾驶(多模态)大模型综述:从DriveGPT4、DriveMLM到DriveLM、DriveVLM
  • 晨控CK-GW08-EC与汇川AC801系列PLC的EtherCAT通讯连接说明手册
  • 向上or向下调整建堆 的时间复杂度的本质区别的讲解
  • 阿一网络安全实战演练之利用 REST URL 中的服务器端参数污染
  • [游戏开发] LuaTable转string存读二进制文件
  • 光伏业务管理系统的一些妙用功能
  • Java面试八股之请简述消息队列的发布订阅模式
  • 七、2 ADC数模转换器有关函数介绍(Keil5)
  • 了解载波侦听多路访问CSMA(上)
  • 开启教育新征程:“集师” 知识付费平台搭建
  • Vue3 + Electron 创建新的子窗口 且子窗口唯一
  • 海康VisionMaster使用学习笔记2-相机取图及参数设置
  • 【网络】【Linux】Linux内核中连接的组织形式与全连接队列
  • 记录一次 npm ERR! cb() never called! 解决过程
  • WEB渗透免杀篇-加载器免杀
  • 什么是反人性设计?
  • 如何进行长截图的两种方法
  • 基于轨迹的汽车跟随系统横向控制方法
  • 2024年8月15日嵌入式学习
  • C++引用和指针的区别还分不清楚?
  • 【Cesium开发实战】相机捕捉功能,获取当前视图,设定分辨率可下载当前视图图片
  • 基于spring boot的疫情信息管理系统
  • 【秋招笔试】8.11大疆秋招(第二套)-测开岗
  • Vitis AI 基本认知(训练过程)
  • 《SQL 约束:保障数据完整性与准确性的关键防线》