MongoDB入门详解

文章目录

  • MongoDB
    • 下载和安装
    • 1.MongoDBCompass字段简介
      • 1.1 Aggregations(聚合)
      • 1.2 Schema(模式分析)
      • 1.3 Indexes(索引)
      • 1.4 Validation(数据验证)
    • 2.增删改查操作
      • 2.1创建、删除数据库,集合
      • 2.2创建集合的可选参数
      • 2.3条件操作符
      • 2.4排序
      • 2.5索引
    • 3.操作案例
      • 3.1 覆盖索引查询
      • 3.2 查询分析explain
      • 3.3 原子操作
      • 3.4 高级索引:复合索引 / 文本索引 / 哈希索引
      • 3.5 MapReduce 操作
      • 3.6 全文检索(Text Search)
      • 3.7 正则表达式查询
      • 3.8 自增 ID(模拟方式)
    • 参考文章

MongoDB

下载和安装

mongodb官网:https://www.mongodb.com/

下载MongoDB和MongoDBCompass。

1.MongoDBCompass字段简介

在这里插入图片描述

1.1 Aggregations(聚合)

  • 分组($group
  • 过滤($match
  • 统计(如计数、求和、平均)
  • 排序、投影、连接等操作

类似 SQL 中的 GROUP BY + HAVING + 函数处理。

1.2 Schema(模式分析)

MongoDB 是无模式(schema-less)的数据库,但 Schema 工具可以自动分析当前集合中字段的结构、类型、分布等

  • 每个字段的数据类型(string、number、array 等)
  • 是否为可选字段
  • 是否为空值多
  • 字段的出现频率(字段使用的百分比)

1.3 Indexes(索引)

MongoDB 中的索引类似于关系型数据库中的索引,它能加速查询,避免每次都全表扫描。

常见索引类型:

  • 单字段索引:对某个字段加速,如 name
  • 复合索引:多个字段组合加速,如 { name: 1, age: -1 }
  • 唯一索引:字段值不能重复
  • TTL 索引:自动过期删除文档(常用于缓存/临时数据)

Compass 中作用:

  • 查看当前集合有哪些索引
  • 创建、删除索引
  • 查看哪些索引在使用(查看性能瓶颈)

1.4 Validation(数据验证)

虽然 MongoDB 是无模式的,但你可以通过 Validation 规则对插入的数据进行验证约束

比如你可以要求:

  • 字段 age 必须是数字且 >= 0
  • email 字段必须存在,且是字符串

Compass 中作用:

你可以可视化地配置 Validation,避免后端插入非法数据,让 MongoDB 更“像关系型数据库”。

2.增删改查操作

MongoDB 创建集合 | 菜鸟教程

2.1创建、删除数据库,集合

当你使用 use 命令来指定一个数据库时,如果该数据库不存在,MongoDB将自动创建它。

如果数据库不存在,则创建数据库,否则切换到指定数据库。

1、创建数据库

在这里插入图片描述

没有这个数据库,是因为还没有数据,所以就不显示这个dbname,可以增加一条数据,就可以显示。

在这里插入图片描述

2、删除数据库(删除当前处于的这个数据库)

在这里插入图片描述

3、创建集合

在这里插入图片描述

4、删除集合

db.name.drop()

2.2创建集合的可选参数

MongoDB 中使用 createCollection() 方法来创建集合。

语法格式:

db.createCollection(name, options)

参数说明:

  • name: 要创建的集合名称。
  • options: 可选参数, 指定有关内存大小及索引的选项。

具体参数详见:MongoDB 创建集合 | 菜鸟教程

采用可视化界面创建Validation规则:

在这里插入图片描述

现在分别插入两个数据一个错误,一个正常观察结果。

在这里插入图片描述

在这里插入图片描述

详细错误:

在这里插入图片描述

可以看到是邮箱验证不正确。

2.3条件操作符

MongoDB 条件操作符 | 菜鸟教程

2.3.1、in操作符

在这里插入图片描述

2.3.2、逻辑操作符

在这里插入图片描述

2.4排序

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

sort()方法基本语法如下所示:

db.collection.find().sort({ field1: 1, field2: -1 })

  • { field1: 1, field2: -1 }:指定要排序的字段及排序顺序。1 表示升序,-1 表示降序。

2.5索引

MongoDB 索引 | 菜鸟教程

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。

这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可能要花费几十秒甚至几分钟,这对网站的性能是非常致命的。

索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

在 MongoDB 中,常见的索引类型包括:

  • 单字段索引:基于单个字段的索引。
  • 复合索引:基于多个字段组合的索引。
  • 文本索引:用于支持全文搜索。
  • 地理空间索引:用于地理空间数据的查询。
  • 哈希索引:用于对字段值进行哈希处理的索引。

3.操作案例

3.1 覆盖索引查询

覆盖索引是指查询所需的字段都在一个索引中,MongoDB 无需访问文档本身,从而提升查询效率。

// 插入数据
db.users.insertMany([{ name: "Alice", age: 25, email: "alice@example.com" },{ name: "Bob", age: 30, email: "bob@example.com" }
]);
// 创建索引,仅包含 name 和 age
db.users.createIndex({ name: 1, age: 1 });
// 使用覆盖索引进行查询(不返回 _id)
db.users.find({ name: "Alice" }, { name: 1, age: 1, _id: 0 });

结果预期:

在这里插入图片描述

说明: 查询字段与返回字段全部包含在索引中,命中“覆盖索引”。

3.2 查询分析explain

使用 explain() 方法可查看 MongoDB 查询执行计划,帮助我们理解是否使用了索引。

db.users.find({ age: { $gt: 20 } }).explain("executionStats");

3.3 原子操作

原子性保证单个文档的操作不会中断,如 $inc, $set 等操作。

示例:银行账户转账

// 初始账户
db.accounts.insert({ _id: 1, name: "Tom", balance: 500 });
// Tom 花了 100
db.accounts.updateOne({ _id: 1 }, { $inc: { balance: -100 } });
// 查看余额
db.accounts.find({ _id: 1 });

在这里插入图片描述

3.4 高级索引:复合索引 / 文本索引 / 哈希索引

// 复合索引:适用于多条件排序
db.products.createIndex({ category: 1, price: -1 });
// 文本索引:全文搜索
db.articles.insert({ title: "MongoDB", content: "MongoDB" });
db.articles.createIndex({ title: "text", content: "text" });
db.articles.find({ 
$text: { $
search: "indexing" } });
// 哈希索引:用于分片或随机访问
db.users.createIndex({ user_id: "hashed" });

3.5 MapReduce 操作

统计用户总订单金额:

db.orders.insertMany([{ customerId: 1, amount: 100 },{ customerId: 1, amount: 200 },{ customerId: 2, amount: 300 }
]);
db.orders.mapReduce(function () { emit(this.customerId, this.amount); },function (key, values) { return Array.sum(values); },{ out: "total_amount" }
);
// 查询结果
db.total_amount.find();

在这里插入图片描述

3.6 全文检索(Text Search)

db.posts.insertMany([{ title: "MongoDB tutorial", body: "Learn MongoDB full text search." },{ title: "Redis guide", body: "Redis supports fast key-value operations." }
]);
db.posts.createIndex({ title: "text", body: "text" });
db.posts.find({ $text: { $search: "MongoDB search" } });

在这里插入图片描述

3.7 正则表达式查询

db.customers.insertMany([{ name: "Jack" }, { name: "Jason" }, { name: "Linda" }
]);
db.customers.find({ name: /^Ja/ });  // 匹配 "Jack" 和 "Jason"

在这里插入图片描述

3.8 自增 ID(模拟方式)

// 初始化计数器集合
db.counters.insert({ _id: "userid", seq: 0 });
// 获取自增 ID 的函数
function getNextId(name) {return db.counters.findOneAndUpdate({ _id: name },{ $inc: { seq: 1 } },{ returnDocument: "after" }).seq;
}
// 使用自增 ID 插入数据
db.users.insert({ _id: getNextId("userid"), name: "Tom" });

在这里插入图片描述

参考文章

1、https://www.runoob.com/mongodb/mongodb-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从Oculus到Meta:Facebook实现元宇宙的硬件策略

Oculus的起步 Facebook在2014年收购了Oculus,这标志着其在虚拟现实(VR)领域的首次重大投资。Oculus Rift作为公司的旗舰产品,是一款高端的VR头戴设备,它为用户带来了沉浸式的体验。Facebook通过Oculus Rift&#xff0…

安装与配置Go语言开发环境 -《Go语言实战指南》

为了开始使用Go语言进行开发,我们首先需要正确安装并配置Go语言环境。Go的安装相对简单,支持多平台,包括Windows、macOS和Linux。本节将逐一介绍各平台的安装流程及环境变量配置方式。 一、Windows系统 1. 下载Go安装包 前往Go语言官网&…

网络的搭建

1、rpm rpm -ivh 2、yum仓库(rpm包):网络源 ----》网站 本地源 ----》/dev/sr0 光盘映像文件 3、源码安装 源码安装(编译) 1、获取源码 2、检测环境生成Ma…

多元随机变量协方差矩阵

主要记录多元随机变量数字特征相关内容。 关键词:多元统计分析 一元随机变量 总体 随机变量Y 总体均值 μ E ( Y ) ∫ y f ( y ) d y \mu E(Y) \int y f(y) \, dy μE(Y)∫yf(y)dy 总体方差 σ 2 V a r ( Y ) E ( Y − μ ) 2 \sigma^2 Var(Y) E(Y - \…

Ros工作空间

工作空间其实放到嵌入式里就是相关的编程包 ------------------------------------- d第一个Init 就是类型的初始化 然后正常一个catkin_make 后 就会产生如devil之类的文件, 你需要再自己 终端 一个catkin_make install 一下 。这样对应install也会产生&#xf…

qt国际化翻译功能用法

文章目录 [toc]1 概述2 设置待翻译文本3 生成ts翻译源文件4 编辑ts翻译源文件5 生成qm翻译二进制文件6 加载qm翻译文件进行翻译 更多精彩内容👉内容导航 👈👉Qt开发经验 👈 1 概述 在 Qt 中,ts 文件和 qm 文件是用于国…

PyTorch 与 TensorFlow 中基于自定义层的 DNN 实现对比

深度学习双雄对决:PyTorch vs TensorFlow 自定义层大比拼 目录 深度学习双雄对决:PyTorch vs TensorFlow 自定义层大比拼一、TensorFlow 实现 DNN1. 核心逻辑 二、PyTorch 实现自定义层1. 核心逻辑 三、关键差异对比四、总结 一、TensorFlow 实现 DNN 1…

1ms城市算网稳步启航,引领数字领域的“1小时经济圈”效应

文 | 智能相对论 作者 | 陈选滨 为什么近年来国产动画、国产3A大作迎来了井喷式爆发?抛开制作水平以及市场需求的升级不谈,还有一个重要原因往往被大多数人所忽视,那就是新型信息的完善与成熟。 譬如,现阶段惊艳用户的云游戏以及…

【计算机视觉】语义分割:Segment Anything (SAM):通用图像分割的范式革命

Segment Anything:通用图像分割的范式革命 技术突破与架构创新核心设计理念关键技术组件 环境配置与快速开始硬件要求安装步骤基础使用示例 深度功能解析1. 多模态提示融合2. 全图分割生成3. 高分辨率处理 模型微调与定制1. 自定义数据集准备2. 微调训练配置 常见问…

机器学习例题——预测facebook签到位置(K近邻算法)和葡萄酒质量预测(线性回归)

一、预测facebook签到位置 代码展示: import pandas as pd from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import…

对ubuntu的简单介绍

目录 1. 简介 2. 核心特点 3. 系统架构与技术亮点 4. 适用场景 5. 优缺点分析 6. 安装与配置建议 7. 未来发展方向 总结 1. 简介 Ubuntu 是基于 Debian 的开源 Linux 操作系统,由 Canonical 公司(创始人 Mark Shuttleworth)提供商业支…

多商户电商系统整套源码开源,支持二次开发,构建多店铺高效联动运营方案

在数字化浪潮席卷全球的今天,电商行业竞争愈发激烈,多商户电商平台凭借其独特的生态优势,成为众多企业和创业者的热门选择。一套优质的多商户电商系统不仅能为商家提供稳定的销售渠道,还能为平台运营者创造巨大的商业价值。分享一…

Qwen3与Deepseek R1对比(截止20250506)

Qwen3和DeepSeek R1都是在AI领域内备受关注的大规模语言模型。根据最近的评测和报道,以下是Qwen3与DeepSeek R1的一些对比要点: 全面性能: Qwen3被描述为在数学、推理、代码等核心能力上全面超越了DeepSeek R1。特别是在编程能力方面&#x…

Linux56 YUM源配置

epel未启动 显示系统未通过注册 配置YUM仓库 本地YUM仓库 1.备份 tar -zcf repo.tar.gz *.repo 2.挂载 mount -o ro /dev/sr0 /mnt 3.开机自启 chmod x /etc/rc.local echo ‘mount -o ro /dec/sr0 /mnt’ /etc/rc.local 4.编写本地YUM仓库 local.repo [local] namelocal yum …

二叉树—中序遍历—非递归

初始状态 假设当前从根节点 b 开始,此时栈为空 。 第一步:处理根节点 b 的左子树 调用 goAlongLeftBranch 函数,从节点 b 开始,因为 b 有左子树(节点 a ),将 b 入栈,此时栈&#…

R 语言科研绘图第 45 期 --- 桑基图-和弦

在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.weixin.qq.c…

ARM 流控制指令

计算机按照严格的顺序执行指令。流控制改变了默认的顺序执行方式。前面已 经介绍了强制跳转到程序中某个非顺序位置的无条件分支。以及依据测试结果 进行跳转的条件分支。这里将介绍子程序调用和返回指令,它们会跳转到一个 指令块、执行这些指令,然后返回…

PDF内容搜索--支持跨文件夹多文件、组合词搜索

平时我们接触到的PDF文档特别多,需要对PDF文档做一些处理,那么今天给大家带来的这两个软件非常的棒,可以帮你提升处理文档的效率。 PDF内容搜索 快速检索 我用夸克网盘分享了「PDF搜索PDF 转长图.zip」,点击链接即可保存。打开「…

个人Unity自用面经(未完)

目录标题 1.在 2D 平台跳跃游戏项目中,你使用了对象池来生成和回收怪物包含阵亡的动画预制件。在对象池回收对象时,如何确保动画状态被正确重置,避免下次使用时出现异常?2.在僵尸吃脑子模拟项目中,你创建了继承于IAspe…

【计网】ICMP、IP、Ethernet PDU之间的封装关系

TCP/IP体系结构 应用层RIP、OSPF、FTP运输层TCP、UDP网际层IP、ARP、ICMP网络接口层底层协议(Ethernet) 数据链路层 Ethernet报文格式 6Byte6Byte2Byte46~1500Byte4Byte目的MAC地址源MAC地址类型/长度数据FCS 其中,类型 / 长度值小于 1536…