MongoDB 入门操作指南
文章目录
- MongoDB 入门操作指南
- 1. 连接到 MongoDB 数据库
- 2. 查看当前数据库
- 3. 显示所有数据库
- 4. 切换或创建数据库
- 5. 查看当前数据库中的所有集合
- 6. 创建集合
- 7. 插入文档
- 插入单个文档
- 插入多个文档
- 8. 查询文档
- 查询所有文档
- 查询匹配条件的文档
- 格式化查询输出
- 9. 更新文档
- 更新单个文档
- 更新多个文档
- 10. 删除文档
- 删除单个文档
- 删除多个文档
- 11. 删除集合
- 12. 删除数据库
- 13. 索引操作
- 创建索引
- 查看索引
- 删除索引
- 13. 索引操作
- 13.1 创建索引
- 13.2 创建复合索引
- 13.3 唯一索引
- 13.4 查看索引
- 13.5 删除索引
- 13.6 删除所有索引
- 14. 聚合操作
- 14.1 聚合管道基础
- 14.2 常见的聚合操作符
- 14.2.1 `$match`
- 14.2.2 `$group`
- 14.2.3 `$sort`
- 14.2.4 `$project`
- 14.2.5 `$limit`
- 14.2.6 `$skip`
- 14.2.7 `$unwind`
- 14.3 复杂的聚合管道示例
- 15. 事务操作(需要 MongoDB 4.0+ 支持)
MongoDB 入门操作指南
MongoDB 是一个开源的 NoSQL 数据库,它基于文档存储数据,适用于大量非结构化数据。本文将介绍 MongoDB 的一些常见操作和基本命令,帮助你快速入门。
1. 连接到 MongoDB 数据库
首先,你需要在命令行中运行以下命令来连接到 MongoDB 实例:
mongo
此命令将连接到默认的 localhost:27017
地址的 MongoDB 实例。
2. 查看当前数据库
连接到 MongoDB 后,你可以查看当前使用的数据库:
db
3. 显示所有数据库
要查看当前 MongoDB 实例中的所有数据库,可以运行以下命令:
show databases
4. 切换或创建数据库
你可以使用以下命令切换到一个已有的数据库,或者如果该数据库不存在,它会被创建:
use <database_name>
例如:
use mydb
5. 查看当前数据库中的所有集合
要查看当前数据库中的所有集合,可以使用以下命令:
show collections
6. 创建集合
你可以显式地创建一个集合,使用以下命令:
db.createCollection("<collection_name>")
如果你插入数据时指定了集合名,MongoDB 会自动创建该集合。
7. 插入文档
插入单个文档
db.<collection_name>.insertOne({key1: value1, key2: value2})
插入多个文档
db.<collection_name>.insertMany([{key1: value1}, {key2: value2}])
8. 查询文档
查询所有文档
db.<collection_name>.find()
查询匹配条件的文档
db.<collection_name>.find({key: value})
格式化查询输出
db.<collection_name>.find({key: value}).pretty()
9. 更新文档
更新单个文档
db.<collection_name>.updateOne({key: value}, {$set: {key1: new_value}})
更新多个文档
db.<collection_name>.updateMany({key: value}, {$set: {key1: new_value}})
10. 删除文档
删除单个文档
db.<collection_name>.deleteOne({key: value})
删除多个文档
db.<collection_name>.deleteMany({key: value})
11. 删除集合
db.<collection_name>.drop()
12. 删除数据库
如果你想删除整个数据库,可以使用以下命令:
db.dropDatabase()
13. 索引操作
创建索引
db.<collection_name>.createIndex({key: 1}) // 1 表示升序,-1 表示降序
查看索引
db.<collection_name>.getIndexes()
删除索引
db.<collection_name>.dropIndex(<index_name>)
13. 索引操作
MongoDB 提供了索引功能来提高查询性能。索引类似于书本的目录,可以加速文档的查找。以下是一些常见的索引操作。
13.1 创建索引
你可以在集合中为一个或多个字段创建索引。创建索引的基本语法如下:
db.<collection_name>.createIndex({ <field_name>: <order> })
<field_name>
: 要创建索引的字段。<order>
: 1 表示升序索引,-1 表示降序索引。
示例:
// 为字段 "name" 创建升序索引
db.users.createIndex({ name: 1 })// 为字段 "age" 创建降序索引
db.users.createIndex({ age: -1 })
13.2 创建复合索引
你可以在多个字段上创建复合索引。复合索引的顺序非常重要,它会影响查询的效率。
db.<collection_name>.createIndex({ field1: 1, field2: -1 })
示例:
// 为字段 "name" 和 "age" 创建复合索引
db.users.createIndex({ name: 1, age: -1 })
13.3 唯一索引
如果你希望某个字段的值是唯一的,可以创建唯一索引。唯一索引可以防止插入重复的数据。
db.<collection_name>.createIndex({ <field_name>: 1 }, { unique: true })
示例:
// 为 "email" 字段创建唯一索引
db.users.createIndex({ email: 1 }, { unique: true })
13.4 查看索引
要查看集合中已创建的索引,可以使用 getIndexes()
方法:
db.<collection_name>.getIndexes()
示例:
// 查看 users 集合的所有索引
db.users.getIndexes()
13.5 删除索引
如果索引不再需要,或者索引不再提供优化性能,可以删除索引。
db.<collection_name>.dropIndex(<index_name>)
示例:
// 删除 "name" 字段的索引
db.users.dropIndex('name_1')
13.6 删除所有索引
如果你希望删除集合中的所有索引(除了默认的 _id
索引),可以使用 dropIndexes()
方法:
db.<collection_name>.dropIndexes()
示例:
// 删除 users 集合中的所有索引
db.users.dropIndexes()
14. 聚合操作
MongoDB 的聚合框架允许你执行更复杂的查询,支持数据过滤、排序、分组和变换。聚合操作以管道形式表达,通常由多个阶段组成。
14.1 聚合管道基础
一个简单的聚合管道包含多个阶段,每个阶段都通过一个特定的操作符来处理数据。常见的操作符有 $match
、$group
、$sort
、$project
等。
db.<collection_name>.aggregate([{ $match: { key: value } }, // 筛选符合条件的数据{ $group: { _id: "$field", total: { $sum: "$value" } } } // 根据某个字段进行分组,并计算总和
])
14.2 常见的聚合操作符
14.2.1 $match
$match
用于筛选符合条件的文档,类似于 SQL 的 WHERE
子句。
db.<collection_name>.aggregate([{ $match: { age: { $gt: 30 } } }
])
示例:
// 查询年龄大于 30 的用户
db.users.aggregate([{ $match: { age: { $gt: 30 } } }
])
14.2.2 $group
$group
用于根据指定字段对文档进行分组,并执行聚合操作,如求和、平均值等。
db.<collection_name>.aggregate([{ $group: { _id: "$field", total: { $sum: "$value" } } }
])
示例:
// 按年龄分组,并计算每个年龄段的用户数量
db.users.aggregate([{ $group: { _id: "$age", count: { $sum: 1 } } }
])
14.2.3 $sort
$sort
用于对查询结果进行排序,类似于 SQL 的 ORDER BY
子句。
db.<collection_name>.aggregate([{ $sort: { age: -1 } }
])
示例:
// 按年龄降序排序
db.users.aggregate([{ $sort: { age: -1 } }
])
14.2.4 $project
$project
用于指定文档中返回哪些字段,可以用来添加、修改或删除字段。
db.<collection_name>.aggregate([{ $project: { field1: 1, field2: 1 } }
])
示例:
// 返回用户的姓名和年龄字段
db.users.aggregate([{ $project: { name: 1, age: 1 } }
])
14.2.5 $limit
$limit
用于限制返回的文档数量,类似于 SQL 的 LIMIT
子句。
db.<collection_name>.aggregate([{ $limit: 5 }
])
示例:
// 返回前 5 个用户
db.users.aggregate([{ $limit: 5 }
])
14.2.6 $skip
$skip
用于跳过指定数量的文档,常用于分页。
db.<collection_name>.aggregate([{ $skip: 10 }
])
示例:
// 跳过前 10 个用户,返回后续的用户
db.users.aggregate([{ $skip: 10 }
])
14.2.7 $unwind
$unwind
用于拆分数组字段,每个数组元素将变为一个单独的文档。
db.<collection_name>.aggregate([{ $unwind: "$array_field" }
])
示例:
// 拆分包含多个订单的用户文档
db.users.aggregate([{ $unwind: "$orders" }
])
14.3 复杂的聚合管道示例
假设我们有一个 orders
集合,其中包含用户的订单信息,每个订单记录包括 user_id
和 total_amount
。我们想按 user_id
分组,计算每个用户的总订单金额。
db.orders.aggregate([{ $group: { _id: "$user_id", totalSpent: { $sum: "$total_amount" } } },{ $sort: { totalSpent: -1 } }
])
此管道会根据 user_id
分组,并计算每个用户的 total_amount
总和,然后按总金额降序排序。
15. 事务操作(需要 MongoDB 4.0+ 支持)
在 MongoDB 4.0 及以上版本,你可以使用事务来保证一系列操作的原子性。
// 开始一个会话并启动事务
const session = db.getMongo().startSession();
session.startTransaction();// 执行数据库操作// 提交事务
session.commitTransaction();// 回滚事务
session.abortTransaction();// 结束会话
session.endSession();
相关文章:
MongoDB 入门操作指南
文章目录 MongoDB 入门操作指南1. 连接到 MongoDB 数据库2. 查看当前数据库3. 显示所有数据库4. 切换或创建数据库5. 查看当前数据库中的所有集合6. 创建集合7. 插入文档插入单个文档插入多个文档 8. 查询文档查询所有文档查询匹配条件的文档格式化查询输出 9. 更新文档更新单个…...
共享设备管理难?MDM助力Kiosk模式一键部署
目录 1. 简化设备部署与配置:实现一键式部署 2. 自动化应用更新与内容推送:确保设备始终保持最新状态 3. 权限控制与设备安全:防止滥用与数据泄露 4. 远程管理与故障诊断:保障设备长期稳定运行 5. 数据分析与报告:…...
HttpClient-Java程序中发送Http请求
配置 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version> </dependency> ps:aliyun-sdk-oss中已引入上述配置 HttpClient的核心API: Htt…...

硬件-电源-隔离与非隔离的区别
文章目录 一:隔离电源与非隔离电源1.1 充电器触电新闻1.2 电路拓扑1.3 隔离电源与非隔离电源的优缺点1.3 隔离电源与非隔离电源的选择1.3.1 隔离电源1.3.2 非隔离电源 二:注意事项2.1 隔离电源结构图2.1 隔离耐压测试方法 三:感悟道友&#x…...
Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案
1. 如何在 Kubernetes 中设置资源请求和限制? 资源请求确保容器有最小资源量(CPU/内存),而限制则强制容器消耗的最大资源量。这有助于高效资源分配并防止资源争用。 示例: resources:requests:memory: "256Mi&…...

Training for Computer Use
Training for Computer Use 核心事件:多家科技公司推出能操控计算机的智能体,字节跳动和清华大学团队引入UI - TARS模型,展示了训练模型实现计算机操控能力的新成果。 UI - TARS模型 基本信息:是视觉 - 语言模型Qwen2 - VL的微调版…...

PH热榜 | 2025-02-14
1. Beatoven.ai 标语:能创作完美背景音乐的AI作曲家 介绍:Beatoven.ai 能根据简单的提示生成惊艳的背景音乐,用于你的内容创作。它是由世界各地的真实音乐家倾力打造(并使用了大量数据)。无需任何音乐专业知识&#…...

工业物联网远程监控系统优化方案,基于巨控GRM553Y-CHE
工业物联网远程监控系统优化方案 ——基于巨控GRM553Y-CHE的西门子S7-1500 PLC多站点无线集成方案 1. 项目背景与概述 巨控科技作为工业物联网解决方案提供商,专注于PLC无线通信与远程监控技术研发,其YunPLC安全平台已服务超30,000工业终端,…...

报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant
与 TEN 相聚在「LET’S VISION 2025」大会,欢迎来展位上跟我们交流。这次我们还准备了一场聚焦「computer use」的工作坊,功能新鲜上线,线下首波体验! 📅 TEN 展位:2025年3月1日-2日 TEN workshop&#x…...
Flutter 中的生命周期
在 Flutter 中,StatefulWidget 和 StatelessWidget 这两种 Widget 的生命周期不同,主要关注的是 StatefulWidget,因为它涉及到状态的管理和更新。 StatefulWidget 的生命周期: 1. 创建阶段 (Create) createState():…...

深度整理总结MySQL——redoLog日志工作原理
redo log的工作原理 前言概念为什么需要redo log修改undo页面,会记录对应的redo log吗redo log 和undo log 区别在哪什么是WAL技术redo log要写入磁盘,数据也要写入磁盘,为什么多此一举产生的redo log直接写入磁盘吗redo log 什么时候刷盘innodb_flush_log_at_trx_commit 参数参…...
备战蓝桥杯 Day1 回顾语言基础
开启蓝桥杯刷题之路 Day1 回顾语言基础 1.配置dev 工具->编译选项->勾选编译时加入以下命令->设定编译器配置(release和debug)都要-> -stdc11 ->代码生成/优化->代码生成/优化->语言标准(-std)->ISO C11 ->代码警告->显示最多警告信息(-Wall)…...

小记大模型本地部署:vllm, lmdeploy, ollama
记录一下最近折腾的大模型本地部署。由于学校有部署deepseek的竞赛(觉得扯不?)所以首选ollama这种超级简单的来过关,但我最希望的还是用专门的推理工具部署,因为做应用开发推理速度一定最重要。所以先尝试自己想搞的vl…...

MySQL查看存储过程和存储函数
【图书推荐】《MySQL 9从入门到性能优化(视频教学版)》-CSDN博客 《MySQL 9从入门到性能优化(视频教学版)(数据库技术丛书)》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...
从零到一:开发并上线一款极简记账本小程序的完整流程
从零到一:开发并上线一款极简记账本小程序的完整流程 目录 前言需求分析与功能设计 2.1 目标用户分析2.2 核心功能设计2.3 技术栈选择 开发环境搭建 3.1 微信开发者工具安装与配置3.2 项目初始化3.3 版本控制与协作工具 前端开发 4.1 页面结构与布局4.2 组件化开发…...

卷积神经网络实战人脸检测与识别
文章目录 前言一、人脸识别一般过程二、人脸检测主流算法1. MTCNN2. RetinaFace3. CenterFace4. BlazeFace5. YOLO6. SSD7. CascadeCNN 三、人脸识别主流算法1.deepface2.FaceNet3.ArcFace4.VGGFace5.DeepID 四、人脸识别系统实现0.安装教程与资源说明1. 界面采用PyQt5框架2.人…...

【面试题系列】Java 多线程面试题深度解析
本文涉及Java 多线程面试题,从基础到高级,希望对你有所帮助! 一、基础概念类 1. 请简述 Java 中线程的几种状态及其转换条件 题目分析:这是多线程基础中的基础,考查对线程生命周期的理解,在多线程编程中&…...

【C语言】左旋字符串(三种实现方式)
题目: 实现一个函数,可以左旋字符串中的k个字符。 例如: ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一: 我们画个图分析一下: 基本逻辑: 就是我们每一次旋转之前,我们就取出…...

数论补充 之 前后缀分解问题
文章目录 [0,i-1] 和 [i1,n-1] 共同作用3334,数组的最大因子得分 对于前缀分解问题,我愿把它分为几个大问题:[0,i] 或 [i,n-1] 或 [l,r],或 [0,i-1] 和 [i1,n-1] 共同作用的问题 [0,i-1] 和 [i1,n-1] 共同作用 3334,数组的最大因子得分 3334,数组的最大…...
IoTDB 集群节点 IP 改变,如何更新集群
问题 问题1:如果 IoTDB 配置的时候用的 IP,没有用 hostname,后面 IP 修改了,历史数据需要重新导吗? 问题2:如果现场运行 IoTDB 半年,电脑 IP 要改的话,半年的数据要导出来再导入么…...

简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程
鸿蒙电脑版操作系统来了,很多小伙伴想体验鸿蒙电脑版操作系统,可惜,鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机,来体验大家心心念念的鸿蒙系统啦!注意:虚拟…...

Linux-进程间的通信
1、IPC: Inter Process Communication(进程间通信): 由于每个进程在操作系统中有独立的地址空间,它们不能像线程那样直接访问彼此的内存,所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...
2.2.2 ASPICE的需求分析
ASPICE的需求分析是汽车软件开发过程中至关重要的一环,它涉及到对需求进行详细分析、验证和确认,以确保软件产品能够满足客户和用户的需求。在ASPICE中,需求分析的关键步骤包括: 需求细化:将从需求收集阶段获得的高层需…...

Tauri2学习笔记
教程地址:https://www.bilibili.com/video/BV1Ca411N7mF?spm_id_from333.788.player.switch&vd_source707ec8983cc32e6e065d5496a7f79ee6 官方指引:https://tauri.app/zh-cn/start/ 目前Tauri2的教程视频不多,我按照Tauri1的教程来学习&…...