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) 参数说明: name: 要创建的集合名称。options: 可选参数, 指定有关内存大小及索引的选项。 options 可以是如下参数: 参数名类型描述示例值capped布尔值是否创建一个固定大小的集合。truesize…...
PHP中如何将变量从函数传递给acf_add_filter
在PHP开发中,我们有时需要将变量从函数传递给acf的add_filter钩子。这样做可以让我们在acf字段加载时,对字段值进行动态修改。下面,我将详细介绍如何实现这一功能。 在acf中,我们使用add_filter来添加钩子,对字段的加…...
KNN算法的使用
目录 一、KNN 算法简介 二、KNN算法的使用 1.读取数据 2.处理数据 三、训练模型 1.导入KNN模块 2.训练模型 3.出厂前测试 四、进行测试 1.处理数据 2.进行测试 总结 一、KNN 算法简介 KNN 是一种基于实例的学习算法。它通过比较样本之间的距离来进行预测。算法的核心…...
java文件上传
导入jar包,或者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;例如,创建一个名为 my_database 的数据库: CREATE DATABASE my_database;2. 选择数据库 USE database_name;要使用刚才创建的 my_database 数据库: USE my_database;3. 删除…...
Python环境安装及PIP安装(Mac OS版)
官网 https://www.python.org/downloads/ 安装python python-3.12.1-macos11.pkg下载后,安装一直下一步即可 验证是否安装成功,执行python3命令和pip3命令 配置环境变量 获取python3安装位置并配置在.bash_profile #查看python路径 which python3#…...
2024自动驾驶(多模态)大模型综述:从DriveGPT4、DriveMLM到DriveLM、DriveVLM
前言 由于今年以来,一直在不断深挖具身智能机器人相关,而自动驾驶其实和机器人有着无比密切的联系,甚至可以认为,汽车就是一个带着4个轮子的机器人 加之个人认为,目前大模型落地潜力最大的两个方向,一个是…...
晨控CK-GW08-EC与汇川AC801系列PLC的EtherCAT通讯连接说明手册
晨控CK-GW08-EC与汇川AC801系列PLC的EtherCAT通讯连接说明手册 晨控CK-GW08-EC是一款支持标准工业通讯协议EtherCAT的网关控制器,方便用户集成到PLC等控制系统中。系统还集成了8路读写接口,用户可通过通信接口使用EtherCAT协议对8路读写接口所连接的读卡器进行相对…...
向上or向下调整建堆 的时间复杂度的本质区别的讲解
知识点:(N代表节点数,h代表高度) 1:高度为h的满二叉树节点个数N为 2^(h)-1 即N 2^(h)-1 2:所以h log(N1) 一:向上…...
阿一网络安全实战演练之利用 REST URL 中的服务器端参数污染
所需知识 要解决这个实验室问题,您需要了解以下内容: 如何确定用户输入是否包含在服务器端的 URL 路径或查询字符串中。如何使用路径遍历序列尝试更改服务器端请求。如何查找 API 文档。 这些内容在我们的 API 测试学院主题中有涵盖。 进入实验室 研…...
[游戏开发] LuaTable转string存读二进制文件
UE5和Unity通用此方案,只不过读写文件的接口略有不同,lua代码的处理是相同的。 下面两个方法是 LuaTable和字符串互相转换的代码 function XUtils.luaTableToString(tab, sp)sp sp or ""local s ""for k,v in pairs(tab) doif t…...
光伏业务管理系统的一些妙用功能
现在信息化流程化基本上每个行业都必须要有的了,光伏业务管理系统软件是一种专门用于光伏产业运营和管理的综合性系统,它结合了信息技术、数据分析、项目管理、客户管理等多个领域的知识,为光伏企业提供了一个全面、高效、智能的管理平台&…...
Java面试八股之请简述消息队列的发布订阅模式
请简述消息队列的发布订阅模式 发布订阅(Publish-Subscribe,简称 Pub/Sub)模型是一种消息传递模式,它在组件之间提供了高度的解耦和灵活性。这种模式广泛应用于分布式系统、事件驱动架构以及消息队列系统中。下面是发布订阅模型的…...
七、2 ADC数模转换器有关函数介绍(Keil5)
函数介绍 (1)ADCCLK的配置函数(在rcc.h中) (2)ADC的库函数(在adc.h中)...
了解载波侦听多路访问CSMA(上)
1.CSMA的思想 CSMA的全称是Carrier Sense Multiple Access,在笔者的理解中,其更趋向于一种理论研究的随机接入协议,或者说,基于其思想诞生了比如CSMA/CD与CSMA/CA这样的具体协议。CSMA可以分成以下三种: 1-persistent…...
开启教育新征程:“集师” 知识付费平台搭建
在教育培训行业竞争日益激烈的今天,如何脱颖而出,实现知识的最大价值?答案就在 “集师” 知识付费平台搭建! “集师” 为您打造专属的知识付费平台,提供一站式解决方案。无论您是专注于学科教育、艺术培训还是职业技能…...
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为什么有全连接队列?3.2全连接队列的长度 1.前言 TCP是面向连接的,TCP的各种可靠性机制实际都不…...
记录一次 npm ERR! cb() never called! 解决过程
gitlab cicd过程,使用docker部署Vue3前端项目,报错如下: 针对 npm ERR! cb() never called! 这个报错,网上有很多解决方案,大都是清空缓存,重新运行npm 之类的。笔者全都试过,无法解决问题。笔者…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
python读取SQLite表个并生成pdf文件
代码用于创建含50列的SQLite数据库并插入500行随机浮点数据,随后读取数据,通过ReportLab生成横向PDF表格,包含格式化(两位小数)及表头、网格线等美观样式。 # 导入所需库 import sqlite3 # 用于操作…...
联邦学习带宽资源分配
带宽资源分配是指在网络中如何合理分配有限的带宽资源,以满足各个通信任务和用户的需求,尤其是在多用户共享带宽的情况下,如何确保各个设备或用户的通信需求得到高效且公平的满足。带宽是网络中的一个重要资源,通常指的是单位时间…...
安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程
在高压电气装备、军工装备、石油测井仪器装备、计算存储服务器和机柜、核磁医疗装备、大型发动机组等特种装备生产型企业,其产品具有“小批量、多品种、人工装配、价值高”的特点。 生产管理中存在传统SOP文件内容缺失、SOP更新不及、装配严重依赖个人经验、产品装…...
