当前位置: 首页 > 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 集合已被删除。

相关文章:

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

1. 创建集合 1.1 语法 db.createCollection(name, options) 参数说明&#xff1a; name: 要创建的集合名称。options: 可选参数, 指定有关内存大小及索引的选项。 options 可以是如下参数&#xff1a; 参数名类型描述示例值capped布尔值是否创建一个固定大小的集合。truesize…...

PHP中如何将变量从函数传递给acf_add_filter

在PHP开发中&#xff0c;我们有时需要将变量从函数传递给acf的add_filter钩子。这样做可以让我们在acf字段加载时&#xff0c;对字段值进行动态修改。下面&#xff0c;我将详细介绍如何实现这一功能。 在acf中&#xff0c;我们使用add_filter来添加钩子&#xff0c;对字段的加…...

KNN算法的使用

目录 一、KNN 算法简介 二、KNN算法的使用 1.读取数据 2.处理数据 三、训练模型 1.导入KNN模块 2.训练模型 3.出厂前测试 四、进行测试 1.处理数据 2.进行测试 总结 一、KNN 算法简介 KNN 是一种基于实例的学习算法。它通过比较样本之间的距离来进行预测。算法的核心…...

java文件上传

导入jar包&#xff0c;或者maven <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>…...

MySQL 数据库经验总结

一、数据库操作 1. 创建数据库 CREATE DATABASE database_name;例如&#xff0c;创建一个名为 my_database 的数据库&#xff1a; CREATE DATABASE my_database;2. 选择数据库 USE database_name;要使用刚才创建的 my_database 数据库&#xff1a; USE my_database;3. 删除…...

Python环境安装及PIP安装(Mac OS版)

官网 https://www.python.org/downloads/ 安装python python-3.12.1-macos11.pkg下载后&#xff0c;安装一直下一步即可 验证是否安装成功&#xff0c;执行python3命令和pip3命令 配置环境变量 获取python3安装位置并配置在.bash_profile #查看python路径 which python3#…...

2024自动驾驶(多模态)大模型综述:从DriveGPT4、DriveMLM到DriveLM、DriveVLM

前言 由于今年以来&#xff0c;一直在不断深挖具身智能机器人相关&#xff0c;而自动驾驶其实和机器人有着无比密切的联系&#xff0c;甚至可以认为&#xff0c;汽车就是一个带着4个轮子的机器人 加之个人认为&#xff0c;目前大模型落地潜力最大的两个方向&#xff0c;一个是…...

晨控CK-GW08-EC与汇川AC801系列PLC的EtherCAT通讯连接说明手册

晨控CK-GW08-EC与汇川AC801系列PLC的EtherCAT通讯连接说明手册 晨控CK-GW08-EC是一款支持标准工业通讯协议EtherCAT的网关控制器,方便用户集成到PLC等控制系统中。系统还集成了8路读写接口&#xff0c;用户可通过通信接口使用EtherCAT协议对8路读写接口所连接的读卡器进行相对…...

向上or向下调整建堆 的时间复杂度的本质区别的讲解

知识点&#xff1a;&#xff08;N代表节点数&#xff0c;h代表高度&#xff09; 1&#xff1a;高度为h的满二叉树节点个数N为 2^&#xff08;h&#xff09;-1 即N 2^&#xff08;h&#xff09;-1 2&#xff1a;所以h log&#xff08;N1&#xff09; 一&#xff1a;向上…...

阿一网络安全实战演练之利用 REST URL 中的服务器端参数污染

所需知识 要解决这个实验室问题&#xff0c;您需要了解以下内容&#xff1a; 如何确定用户输入是否包含在服务器端的 URL 路径或查询字符串中。如何使用路径遍历序列尝试更改服务器端请求。如何查找 API 文档。 这些内容在我们的 API 测试学院主题中有涵盖。 进入实验室 研…...

[游戏开发] LuaTable转string存读二进制文件

UE5和Unity通用此方案&#xff0c;只不过读写文件的接口略有不同&#xff0c;lua代码的处理是相同的。 下面两个方法是 LuaTable和字符串互相转换的代码 function XUtils.luaTableToString(tab, sp)sp sp or ""local s ""for k,v in pairs(tab) doif t…...

光伏业务管理系统的一些妙用功能

现在信息化流程化基本上每个行业都必须要有的了&#xff0c;光伏业务管理系统软件是一种专门用于光伏产业运营和管理的综合性系统&#xff0c;它结合了信息技术、数据分析、项目管理、客户管理等多个领域的知识&#xff0c;为光伏企业提供了一个全面、高效、智能的管理平台&…...

Java面试八股之请简述消息队列的发布订阅模式

请简述消息队列的发布订阅模式 发布订阅&#xff08;Publish-Subscribe&#xff0c;简称 Pub/Sub&#xff09;模型是一种消息传递模式&#xff0c;它在组件之间提供了高度的解耦和灵活性。这种模式广泛应用于分布式系统、事件驱动架构以及消息队列系统中。下面是发布订阅模型的…...

七、2 ADC数模转换器有关函数介绍(Keil5)

函数介绍 &#xff08;1&#xff09;ADCCLK的配置函数&#xff08;在rcc.h中&#xff09; &#xff08;2&#xff09;ADC的库函数&#xff08;在adc.h中&#xff09;...

了解载波侦听多路访问CSMA(上)

1.CSMA的思想 CSMA的全称是Carrier Sense Multiple Access&#xff0c;在笔者的理解中&#xff0c;其更趋向于一种理论研究的随机接入协议&#xff0c;或者说&#xff0c;基于其思想诞生了比如CSMA/CD与CSMA/CA这样的具体协议。CSMA可以分成以下三种&#xff1a; 1-persistent…...

开启教育新征程:“集师” 知识付费平台搭建

在教育培训行业竞争日益激烈的今天&#xff0c;如何脱颖而出&#xff0c;实现知识的最大价值&#xff1f;答案就在 “集师” 知识付费平台搭建&#xff01; “集师” 为您打造专属的知识付费平台&#xff0c;提供一站式解决方案。无论您是专注于学科教育、艺术培训还是职业技能…...

Vue3 + Electron 创建新的子窗口 且子窗口唯一

main.js const { app, BrowserWindow, ipcMain } require(electron) ...ipcMain.on(window-create, () > {createChildWindow() })let childWindow nullconst createChildWindow () > {// 如果窗口存在 先销毁if (childWindow) {childWindow.destroy()childWindow n…...

海康VisionMaster使用学习笔记2-相机取图及参数设置

相机取图及参数设置 1. 关联相机-相机管理界面 除了以上两类外,第三方相机都可以通过全局相机进行连接 2. 相机参数设置 相机连接 跨网段IP,枚举 图像缓存数量 实时取流,断线重连 只有支持组播的相机才可以实时取流 触发设置 触发源 LINE0 可以保护电路 LINE2 可配置输入输出…...

【网络】【Linux】Linux内核中连接的组织形式与全连接队列

Linux内核中连接的组织形式与全连接队列 文章目录 1.前言2.Linux内核中连接的组织形式2.1套接字和文件描述符2.2创建连接 & 获取连接 3.全连接队列3.1为什么有全连接队列&#xff1f;3.2全连接队列的长度 1.前言 TCP是面向连接的&#xff0c;TCP的各种可靠性机制实际都不…...

记录一次 npm ERR! cb() never called! 解决过程

gitlab cicd过程&#xff0c;使用docker部署Vue3前端项目&#xff0c;报错如下&#xff1a; 针对 npm ERR! cb() never called! 这个报错&#xff0c;网上有很多解决方案&#xff0c;大都是清空缓存&#xff0c;重新运行npm 之类的。笔者全都试过&#xff0c;无法解决问题。笔者…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

如何在网页里填写 PDF 表格?

有时候&#xff0c;你可能希望用户能在你的网站上填写 PDF 表单。然而&#xff0c;这件事并不简单&#xff0c;因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件&#xff0c;但原生并不支持编辑或填写它们。更糟的是&#xff0c;如果你想收集表单数据&#xff…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...