MongoDB 从入门到实践:全面掌握文档型 NoSQL 数据库核心操作

目录

一、MongoDB 基础准备

1. 官方资源获取

2. 安装步骤解析

二、MongoDB 核心指令详解

1. 数据库操作指令

2. 集合操作指令

3. 文档操作指令

查询文档

插入文档

修改文档

删除文档

三、进阶查询技巧

1. 运算符的灵活运用

比较运算符

逻辑运算符

范围与成员运算符

2. 映射、排序与分页

字段映射

排序操作

分页查询

四、用户管理与安全认证

1. 创建用户

2. 连接认证方式

连接字符串认证

参数认证

命令行认证

五、总结与最佳实践

实用建议:


在当今数据爆炸的时代,非关系型数据库(NoSQL)凭借其灵活的架构和出色的扩展性,成为处理海量非结构化数据的首选。其中,MongoDB 作为文档型 NoSQL 数据库的代表,以其易用性和强大功能被广泛应用于电商、社交、物联网等各类场景。本文将从 MongoDB 的基础安装开始,逐步深入到核心指令、进阶查询和用户管理,帮助开发者快速掌握 MongoDB 的实用技能。

一、MongoDB 基础准备

1. 官方资源获取

MongoDB 的官方网站是学习和获取资源的首要渠道,中文官网地址为:https://www.mongodb.com/zh-cn。在官网中,你可以找到最新的版本信息、详细的文档以及相关工具下载(如 MongoDB Community Server、MongoDB Compass 等)。

2. 安装步骤解析

MongoDB 的安装过程相对简单,但需要注意不同操作系统的差异。以下是安装的核心要点:

  • 环境检查

在安装前,需确保操作系统满足 MongoDB 的运行要求:

    • 磁盘空间:至少预留 1GB 以上可用空间
    • 操作系统:Windows 10 及以上 / 主流 Linux 发行版(如 Ubuntu 20.04+、CentOS 7+)/macOS 10.15+
    • 依赖库:Linux 系统需提前安装libcurl、openssl等基础依赖
  • 安装配置
 

mongod --version # 查看服务端版本

mongo --version # 查看客户端版本

    1. 从官网下载对应操作系统的安装包(推荐使用稳定版)
    1. Windows 系统:运行安装程序,选择 "Custom" 自定义安装路径(建议路径不含中文和空格),勾选 "Install MongoDB Compass" 安装可视化工具
    1. Linux 系统:通过tar包解压或包管理器安装,配置数据存储目录(默认/data/db)和日志目录
    1. 环境变量配置:将 MongoDB 的bin目录添加到系统 PATH,验证安装是否成功:

二、MongoDB 核心指令详解

1. 数据库操作指令

 

# 查看所有非空数据库

show dbs

# 查看当前所在数据库

db

# 切换/创建数据库(插入数据后才会实际创建)

use mydatabase

# 删除当前数据库(谨慎操作!)

db.dropDatabase()

⚠️ 注意:新创建的数据库在未插入数据前,使用show dbs不会显示

2. 集合操作指令

集合类似于关系型数据库中的表,以下是常用操作:

 

# 查看当前数据库所有集合

show collections

# 创建集合(可指定可选参数如最大文档数、大小限制等)

db.createCollection("users")

# 删除指定集合

db.users.drop()

💡 提示:MongoDB 支持动态创建集合,插入文档时若集合不存在会自动创建:db.products.insertOne({name:"手机"})

3. 文档操作指令

文档是 MongoDB 的数据基本单位(JSON 格式),支持丰富的 CRUD 操作:

查询文档
 

# 查询集合所有文档(返回游标,默认显示前20条)

db.users.find({})

# 查询集合第一条文档

db.users.findOne({})

# 格式化输出查询结果

db.users.find({}).pretty()

插入文档
 

# 插入单个文档

db.users.insertOne({

name: "张三",

age: 25,

email: "zhangsan@example.com"

})

# 插入多个文档

db.users.insertMany([

{name: "李四", age: 30, email: "lisi@example.com"},

{name: "王五", age: 28, email: "wangwu@example.com"}

])

修改文档
 

# 更新符合条件的第一个文档

db.users.updateOne(

{name: "张三"}, # 查询条件

{$set: {age: 26, email: "new_zhangsan@example.com"}} # 更新内容

)

# 更新所有符合条件的文档

db.users.updateMany(

{age: {$lt: 30}}, # 年龄小于30的文档

{$set: {status: "young"}} # 添加状态字段

)

⚠️ 注意:$set操作符用于指定更新的字段,若不使用$set会替换整个文档

删除文档
 

# 删除符合条件的第一个文档

db.users.deleteOne({name: "张三"})

# 删除所有符合条件的文档

db.users.deleteMany({age: {$gt: 40}}) # 删除年龄大于40的文档

三、进阶查询技巧

1. 运算符的灵活运用

MongoDB 提供丰富的查询运算符,满足复杂查询需求:

比较运算符

运算符

说明

示例

$gt

大于

db.users.find({age: {$gt: 30}})

$gte

大于等于

db.users.find({age: {$gte: 20}})

$lt

小于

db.users.find({age: {$lt: 30}})

$lte

小于等于

db.users.find({age: {$lte: 30}})

$eq

等于(可省略)

db.users.find({age: 30})

$ne

不等于

db.users.find({age: {$ne: 30}})

逻辑运算符
 

# AND条件查询(两种写法)

db.users.find({age: 30, name: {$ne: "t3"}}) # 简单条件

db.users.find({$and: [{age: {$gt: 20}}, {age: {$lt: 30}}]}) # 复杂条件

# OR条件查询

db.users.find({$or: [{age: 20}, {age: 25}]})

# NOT条件查询

db.users.find({age: {$not: {$gt: 25}}}) # 年龄不大于25(即≤25)

范围与成员运算符
 

# 范围查询(25<age<35)

db.users.find({age: {$gt: 25, $lt: 35}})

# 成员查询(age是20或25)

db.users.find({age: {$in: [20,25]}})

# 排除查询(age不是20或25)

db.users.find({age: {$nin: [20,25]}})

2. 映射、排序与分页

字段映射

控制查询结果返回的字段:

 

# 只返回name和age字段(_id默认返回,需显式排除)

db.users.find({}, {name: 1, age: 1, _id: 0})

💡 提示:1 表示包含字段,0 表示排除字段,两种方式不能混用(除了排除_id)

排序操作
 

# 按age降序排序(pymongo中使用)

db.users.find({}, {_id: 0}).sort("age", pymongo.DESCENDING)

# 多字段排序:先按age降序,再按name降序

db.users.find({}, {_id: 0}).sort([("age", pymongo.DESCENDING), ("name", pymongo.DESCENDING)])

注意:shell 环境中可直接使用 1(升序)和 - 1(降序):sort({age: -1})

分页查询
 

# 限制返回2条结果

db.users.find({}, {_id: 0}).limit(2)

# 分页查询:跳过前2条,返回1条(实现第3条数据查询)

db.users.find({}, {_id: 0}).skip(2).limit(1)

最佳实践:分页查询建议结合排序使用,确保结果顺序一致

四、用户管理与安全认证

1. 创建用户

MongoDB 默认无需认证即可访问,生产环境需开启认证机制:

 

# 切换到admin数据库

use admin

# 创建管理员用户

db.createUser({

user: "admin",

pwd: "admin123",

roles: [{role: "root", db: "admin"}] # 超级管理员角色

})

# 创建普通用户(指定数据库权限)

use mydatabase

db.createUser({

user: "zzy",

pwd: "123456",

roles: [{role: "readWrite", db: "mydatabase"}] # 读写权限

})

创建完成后需重启 MongoDB 服务并开启认证:

 

# Linux系统启动命令

mongod --auth --dbpath /data/db --logpath /var/log/mongodb.log --fork

2. 连接认证方式

连接字符串认证
 

# Python连接示例

import pymongo

client = pymongo.MongoClient(

f"mongodb://zzy:123456@localhost:27017/mydatabase?authSource=admin"

)

参数认证
 

client = pymongo.MongoClient(

host="localhost",

port=27017,

username='zzy',

password='123456',

authSource='admin' # 认证数据库,通常为admin

)

命令行认证
 

# 命令行连接并认证

mongo -u zzy -p 123456 --authenticationDatabase admin

五、总结与最佳实践

本文详细介绍了 MongoDB 的安装配置、核心操作指令、进阶查询技巧以及用户安全管理。作为文档型 NoSQL 数据库的佼佼者,MongoDB 凭借其schema 灵活性水平扩展能力丰富的查询功能,在现代应用开发中占据重要地位。

实用建议:

  1. 生产环境务必开启认证机制,根据业务需求分配最小权限角色
  1. 复杂查询建议创建索引提升性能:db.users.createIndex({name: 1})
  1. 批量操作优先使用insertMany、updateMany等批量指令减少网络交互
  1. 定期备份数据:使用mongodump工具进行数据备份

MongoDB 还有更多高级特性值得探索,如聚合管道、地理空间查询、分片集群等。掌握本文内容后,你已具备 MongoDB 的基础开发能力,可在实际项目中进一步实践深化。

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

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

相关文章

CVPR2025丨遥感领域,全模态与秒超高清遥感建模重大突破,性能提升创新点

关注gongzhonghao【CVPR顶会精选】刚入门遥感建模时&#xff0c;总好奇别人为什么总能提出新方法&#xff1f;慢慢摸索后才发现&#xff0c;创新点并不是硬憋出来的&#xff0c;而是要从数据特性、传感器差异、地物细节以及环境变化中发现机会。不同波段、不同分辨率、不同时相…

HTML5详篇

前端三剑客 前端三剑客是指HTML、CSS和JavaScript: HTML超文本标记语言(Hyper Text Markup Language):简单理解描述网页结构的;用于网页内容的语言。它通过使用不同的HTML标签来定义页面中的各种元素,例如标题、段落、图像、链接等【无羽毛的小鸟模型】 CSS层叠样式表(…

【Transient-Free 3DGS】delayed densification + coarse to fine增加GS的鲁棒性

25年最新连接去除场景瞬态对象工程与3DGS的pipeline&#xff0c;改进了spotlesssplats&#xff0c;已开源&#xff1a; [2506.02751] RobustSplat: Decoupling Densification and Dynamics for Transient-Free 3DGSAbstract page for arXiv paper 2506.02751: RobustSplat: De…

【MySQL】CRUD基础详解

CRUD基础前言&#xff1a;数据库的层级结构一、新增&#xff08;Create&#xff09;1. 单行数据 全列插入2. 单行数据的简写插入3. 指定列插入4. 多行数据插入二、查询&#xff08;Retrieve&#xff09;1. 全列查询2. 指定列查询3. 查询结果为表达式&#xff08;1&#xff09;…

互联网大厂Java求职面试实录:核心技术栈与业务场景解析

互联网大厂Java求职面试实录&#xff1a;核心技术栈与业务场景解析 面试场景设定 本文通过一个严肃的面试官和搞笑的水货程序员大面条之间的对话&#xff0c;模拟互联网大厂Java岗位的技术面试过程。面试涵盖Java SE、Spring生态、数据库、微服务、缓存、安全、消息队列、AI等多…

response对象的elapsed属性

在Python的requests库中&#xff0c;当我们发送一个请求后&#xff0c;会得到一个Response对象&#xff0c;这个对象有一个elapsed属性&#xff0c;它返回一个timedelta对象&#xff0c;表示从发送请求到收到响应所经过的时间。response.elapsed.total_seconds() 是 Python req…

【ansible】5.在受管主机部署文件和Jinja2模板

1.Ansible 中&#xff0c;如何用模块创建一个文件并设置权限644并设置SELinux类型&#xff0c;如何从受管主机中删除文件&#xff1f;使用ansible.builtin集合中的 file 模块&#xff0c;添加state&#xff1a;touch 创建文件&#xff0c;mode&#xff1a;‘0644’ 设置权限&am…

雪花算法数据库主键

雪花算法&#xff08;Snowflake&#xff09;作为一种分布式 ID 生成方案&#xff0c;在分布式系统中具有显著优势&#xff0c;能够解决多个关键问题。以下是它的核心好处及主要应用场景&#xff1a;雪花算法的核心好处全局唯一性&#xff1a;通过时间戳、机器 ID、数据中心 ID …

C/C++ 头文件命名约定

有的时候&#xff0c;在C的代码中&#xff0c;可以看到有如下的头文件引用的代码: #include <iostream> #include <unistd.h> #include <csignal>其中有一些是引用了.h文件&#xff0c;另外一些是引用了模块式的比如iostream和csignal&#xff0c;那么为什么…

异质结3.0时代的降本提效革命:捷造科技设备技术创新与产业拐点分析

光伏产业经历了从PERC到TOPCon和异质结&#xff08;HJT&#xff09;的技术迭代&#xff0c;而2025年将成为异质结技术规模化应用的关键转折点。捷造科技通过一系列突破性技术创新&#xff0c;将GW级异质结整线设备价格降至2亿元&#xff0c;较行业平均水平降低约40%&#xff0c…

【网络】http 协议中 Vary 标头的作用

在 HTTP 协议中&#xff0c;Vary 标头是一个关键的缓存控制机制&#xff0c;用于告知缓存服务器&#xff08;或代理&#xff09;&#xff1a;响应内容的生成依赖于请求中的哪些特定头部字段。其核心作用是确保缓存服务器能根据这些字段的差异&#xff0c;正确区分和返回不同版本…

CSS 进阶用法

一、选择器进阶复杂选择器组合详解后代选择器后代选择器使用空格分隔两个选择器&#xff0c;例如div p&#xff0c;表示选择div元素内所有的p元素。这种选择方式会匹配所有层级的后代元素&#xff0c;包括子元素、孙元素等任意深度的嵌套元素。应用示例&#xff1a;/* 选中arti…

GitHub 热榜项目 - 日榜(2025-08-23)

GitHub 热榜项目 - 日榜(2025-08-23) 生成于&#xff1a;2025-08-23 统计摘要 共发现热门项目&#xff1a;13 个 榜单类型&#xff1a;日榜 本期热点趋势总结 本期GitHub热榜呈现三大技术热点&#xff1a;1&#xff09;AI工作流构建成为风口&#xff0c;sim和airi等项目展示…

SHAP分析+KOA-RIME开普勒结合霜冰算法双重优化BP神经网络+9种映射方法+新数据预测!机器学习可解释分析!

代码主要功能 该Matlab代码实现了一个KOA-RIME开普勒结合霜冰算法双重优化的BP神经网络回归模型&#xff0c;结合特征贡献度分析&#xff08;SHAP&#xff09;和新数据预测功能。核心功能包括&#xff1a; 双重参数优化&#xff1a;先用智能算法&#xff08;以chebyshev映射改进…

【数据结构】栈和队列——栈

目录栈和队列栈栈的基本概念栈的顺序存储实现栈的定义与初始化入栈操作出栈操作读取栈顶元素判空和判满操作栈的销毁操作操作集合栈和队列 栈 栈的基本概念 栈的定义&#xff1a; 栈&#xff08;Stack&#xff09; 是一种线性表&#xff0c;它限定了数据元素的插入和删除操…

大数据管理与应用系列丛书《数据挖掘》读书笔记之集成学习(1)

文章目录前言一、集成学习是什么&#xff1f;1.基本思想2.集成学习的类型3. 集成学习的结合策略3.1 为什么结合策略是集成学习的灵魂&#xff1f;3.2 经典策略(1)**投票法&#xff08;Voting&#xff09;****(2)平均法&#xff08;Averaging&#xff09;****(3) 学习法**3.3 关…

嵌入式知识篇---32GUI

要理解 32 位单片机的 GUI&#xff0c;咱们先从 “基础概念” 入手&#xff0c;再拆成 “为什么能跑 GUI”“核心组成”“怎么实现”“常用工具”“实际用途” 这几步讲&#xff0c;全程不用复杂术语&#xff0c;像聊日常用品一样说清楚。一、先搞懂 2 个基础概念在讲 “32 位单…

【iOS】SDWebImage第三方库源码学习笔记

前言之前在写项目时&#xff0c;经常用到SDWebImage这个第三方库来加载图片&#xff0c;并且了解到了这个第三方库在处理图片时自带异步下载和缓存功能&#xff0c;以及对cell复用的处理。这篇文章来系统学习一下SDWebImage第三方库的知识以及底层原理简介SDWebImage为UIImageV…

Linux --网络基础概念

一.网络发展独立模式&#xff1a;在早期计算机之间是相互独立的&#xff0c;机器之间的数据只能通过软硬盘来传输&#xff0c;这就代表无法同时完成任务&#xff0c;需要前面的计算机完成各自的任务经过硬盘传递数据再完成自己的任务&#xff0c;效率十分低下。网络互联&#x…

教育系统搭建攻略:线上知识付费与线下消课排课全解析

作为一名资深平台测评师&#xff0c;最近我挖到了一个教育机构的 “宝藏工具”—— 乔拓云教育系统。别看它名字低调&#xff0c;用起来那叫一个顺手&#xff0c;线上知识付费、线下消课排课全给你安排得明明白白&#xff0c;简直是机构老板和教务员的 “摸鱼神器”。多端口管理…