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

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_idtotal_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. 简化设备部署与配置&#xff1a;实现一键式部署 2. 自动化应用更新与内容推送&#xff1a;确保设备始终保持最新状态 3. 权限控制与设备安全&#xff1a;防止滥用与数据泄露 4. 远程管理与故障诊断&#xff1a;保障设备长期稳定运行 5. 数据分析与报告&#xff1a…...

HttpClient-Java程序中发送Http请求

配置 <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version> </dependency> ps:aliyun-sdk-oss中已引入上述配置 HttpClient的核心API&#xff1a; Htt…...

硬件-电源-隔离与非隔离的区别

文章目录 一&#xff1a;隔离电源与非隔离电源1.1 充电器触电新闻1.2 电路拓扑1.3 隔离电源与非隔离电源的优缺点1.3 隔离电源与非隔离电源的选择1.3.1 隔离电源1.3.2 非隔离电源 二&#xff1a;注意事项2.1 隔离电源结构图2.1 隔离耐压测试方法 三&#xff1a;感悟道友&#x…...

Kubernetes 最佳实践:Top 10 常见 DevOps/SRE 面试问题及答案

1. 如何在 Kubernetes 中设置资源请求和限制&#xff1f; 资源请求确保容器有最小资源量&#xff08;CPU/内存&#xff09;&#xff0c;而限制则强制容器消耗的最大资源量。这有助于高效资源分配并防止资源争用。 示例&#xff1a; resources:requests:memory: "256Mi&…...

Training for Computer Use

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

PH热榜 | 2025-02-14

1. Beatoven.ai 标语&#xff1a;能创作完美背景音乐的AI作曲家 介绍&#xff1a;Beatoven.ai 能根据简单的提示生成惊艳的背景音乐&#xff0c;用于你的内容创作。它是由世界各地的真实音乐家倾力打造&#xff08;并使用了大量数据&#xff09;。无需任何音乐专业知识&#…...

工业物联网远程监控系统优化方案,基于巨控GRM553Y-CHE

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

报名丨Computer useVoice Agent :使用 TEN 搭建你的 Mac Assistant

与 TEN 相聚在「LET’S VISION 2025」大会&#xff0c;欢迎来展位上跟我们交流。这次我们还准备了一场聚焦「computer use」的工作坊&#xff0c;功能新鲜上线&#xff0c;线下首波体验&#xff01; &#x1f4c5; TEN 展位&#xff1a;2025年3月1日-2日 TEN workshop&#x…...

Flutter 中的生命周期

在 Flutter 中&#xff0c;StatefulWidget 和 StatelessWidget 这两种 Widget 的生命周期不同&#xff0c;主要关注的是 StatefulWidget&#xff0c;因为它涉及到状态的管理和更新。 StatefulWidget 的生命周期&#xff1a; 1. 创建阶段 (Create) createState()&#xff1a;…...

深度整理总结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的竞赛&#xff08;觉得扯不&#xff1f;&#xff09;所以首选ollama这种超级简单的来过关&#xff0c;但我最希望的还是用专门的推理工具部署&#xff0c;因为做应用开发推理速度一定最重要。所以先尝试自己想搞的vl…...

MySQL查看存储过程和存储函数

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

从零到一:开发并上线一款极简记账本小程序的完整流程

从零到一&#xff1a;开发并上线一款极简记账本小程序的完整流程 目录 前言需求分析与功能设计 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 多线程面试题&#xff0c;从基础到高级&#xff0c;希望对你有所帮助&#xff01; 一、基础概念类 1. 请简述 Java 中线程的几种状态及其转换条件 题目分析&#xff1a;这是多线程基础中的基础&#xff0c;考查对线程生命周期的理解&#xff0c;在多线程编程中&…...

【C语言】左旋字符串(三种实现方式)

题目&#xff1a; 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一&#xff1a; 我们画个图分析一下&#xff1a; 基本逻辑&#xff1a; 就是我们每一次旋转之前&#xff0c;我们就取出…...

数论补充 之 前后缀分解问题

文章目录 [0,i-1] 和 [i1,n-1] 共同作用3334,数组的最大因子得分 对于前缀分解问题&#xff0c;我愿把它分为几个大问题&#xff1a;[0,i] 或 [i,n-1] 或 [l,r],或 [0,i-1] 和 [i1,n-1] 共同作用的问题 [0,i-1] 和 [i1,n-1] 共同作用 3334,数组的最大因子得分 3334,数组的最大…...

IoTDB 集群节点 IP 改变,如何更新集群

问题 问题1&#xff1a;如果 IoTDB 配置的时候用的 IP&#xff0c;没有用 hostname&#xff0c;后面 IP 修改了&#xff0c;历史数据需要重新导吗&#xff1f; 问题2&#xff1a;如果现场运行 IoTDB 半年&#xff0c;电脑 IP 要改的话&#xff0c;半年的数据要导出来再导入么…...

简易版抽奖活动的设计技术方案

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

c#开发AI模型对话

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

如何理解 IP 数据报中的 TTL?

目录 前言理解 前言 面试灵魂一问&#xff1a;说说对 IP 数据报中 TTL 的理解&#xff1f;我们都知道&#xff0c;IP 数据报由首部和数据两部分组成&#xff0c;首部又分为两部分&#xff1a;固定部分和可变部分&#xff0c;共占 20 字节&#xff0c;而即将讨论的 TTL 就位于首…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)

Name&#xff1a;3ddown Serial&#xff1a;FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名&#xff1a;Axure 序列号&#xff1a;8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...

Windows电脑能装鸿蒙吗_Windows电脑体验鸿蒙电脑操作系统教程

鸿蒙电脑版操作系统来了&#xff0c;很多小伙伴想体验鸿蒙电脑版操作系统&#xff0c;可惜&#xff0c;鸿蒙系统并不支持你正在使用的传统的电脑来安装。不过可以通过可以使用华为官方提供的虚拟机&#xff0c;来体验大家心心念念的鸿蒙系统啦&#xff01;注意&#xff1a;虚拟…...

Linux-进程间的通信

1、IPC&#xff1a; Inter Process Communication&#xff08;进程间通信&#xff09;&#xff1a; 由于每个进程在操作系统中有独立的地址空间&#xff0c;它们不能像线程那样直接访问彼此的内存&#xff0c;所以必须通过某种方式进行通信。 常见的 IPC 方式包括&#…...

2.2.2 ASPICE的需求分析

ASPICE的需求分析是汽车软件开发过程中至关重要的一环&#xff0c;它涉及到对需求进行详细分析、验证和确认&#xff0c;以确保软件产品能够满足客户和用户的需求。在ASPICE中&#xff0c;需求分析的关键步骤包括&#xff1a; 需求细化&#xff1a;将从需求收集阶段获得的高层需…...

Tauri2学习笔记

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