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

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.dtcms.com/a/343681.html

相关文章:

  • 基于Node.js服务端的社区报修管理系统/基于express的在线报修管理系统
  • (论文速读)RandAR:突破传统限制的随机顺序图像自回归生成模型
  • 基于C#的宠物医院管理系统/基于asp.net的宠物医院管理系统
  • 开源 python 应用 开发(十)音频压缩
  • AI时代的“双刃剑”:效率革命与人文焦虑的碰撞
  • week3-[二维数组]小方块
  • 靶机 - SAR
  • UVa1472/LA4980 Hanging Hats
  • C++的指针和引用:
  • C++部署Yolov5模型流程记录
  • flutter geolocator Android国内定位失败问题解决
  • Redis事务全解析:从秒杀案例看原子操作实现
  • C#_接口设计:角色与契约的分离
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day10
  • 树莓派采集、计算机推理:基于GStreamer的YOLOv5实现方案
  • Codeforces Round 1043 (Div.3)
  • AI生成技术报告:GaussDB与openGauss的HTAP功能全面对比
  • Vue 插槽(Slots)全解析2
  • 大数据毕业设计推荐:基于Hadoop+Spark的手机信息分析系统完整方案
  • 使用GMail API 发送邮箱
  • 在Kubernetes中部署一个单节点Elasticsearch
  • 集成电路学习:什么是Camera Calibration相机标定
  • Effective C++ 条款55:熟悉Boost库
  • 8.21-8.22网络编程——词典
  • 集成电路学习:什么是Template Matching模版匹配
  • C++创建一个空类的时候,编译器会自动生成哪些函数了
  • 数据处理与统计分析 —— apply自定义函数
  • lesson44:Redis 数据库全解析:从数据类型到高级应用
  • 鸿蒙开发中的List组件详解
  • spring之自定义拦截器:HandlerInterceptor 控制请求生死权