MongoDB常用语句

MongoDB 常用语句与应用分析

MongoDB 是一个基于分布式文件存储的 NoSQL 数据库,以 JSON 格式(BSON)存储数据,具有高性能、高可用、易扩展等特点。以下是 MongoDB 的核心概念、常用语句、应用场景及优势的详细分析:

一、核心概念

关系型数据库MongoDB说明
数据库 (Database)数据库 (Database)数据的逻辑分组
表 (Table)集合 (Collection)一组文档,类似表但无固定模式
行 (Row)文档 (Document)键值对的集合,类似 JSON 对象
列 (Column)字段 (Field)文档中的一个键值对
主键 (Primary Key)id 字段 (自动生成)文档的唯一标识

二、常用语句

1. 数据库操作

javascript

// 查看所有数据库
show dbs

// 切换/创建数据库(存在则切换,不存在则创建,插入数据后才会实际创建)
use mydb

// 删除当前数据库
db.dropDatabase()
2. 集合操作
// 创建集合(可选参数指定配置)
db.createCollection("users")

// 查看集合列表
show collections

// 删除集合
db.users.drop()
3. 文档操作(CRUD)

插入文档

// 插入单个文档
db.users.insertOne({
  name: "张三",
  age: 25,
  email: "zhangsan@example.com",
  hobbies: ["阅读", "跑步"]
})

// 插入多个文档
db.users.insertMany([
  { name: "李四", age: 30 },
  { name: "王五", age: 22 }
])

查询文档

// 查询所有文档
db.users.find()

// 条件查询(等于)
db.users.find({ age: 25 })

// 条件查询(大于)
db.users.find({ age: { $gt: 25 } })

// 条件查询(逻辑与)
db.users.find({ age: { $gt: 20 }, name: "张三" })

// 条件查询(逻辑或)
db.users.find({ $or: [{ age: 25 }, { name: "李四" }] })

// 投影查询(只返回指定字段)
db.users.find({ name: "张三" }, { name: 1, age: 1, _id: 0 })

// 排序(1升序,-1降序)
db.users.find().sort({ age: 1 })

// 分页(skip跳过,limit限制数量)
db.users.find().skip(10).limit(5)

更新文档

// 更新单个文档(只更新第一个匹配的文档)
db.users.updateOne(
  { name: "张三" },  // 查询条件
  { $set: { age: 26, email: "new@example.com" } }  // 更新操作
)

// 更新多个文档
db.users.updateMany(
  { age: { $lt: 30 } },
  { $inc: { age: 1 } }  // 原子操作:年龄加1
)

// 替换整个文档(注意:会丢失原文档的其他字段)
db.users.replaceOne(
  { name: "张三" },
  { name: "张三", age: 26, gender: "男" }
)

删除文档

// 删除单个文档(只删除第一个匹配的文档)
db.users.deleteOne({ name: "张三" })

// 删除多个文档
db.users.deleteMany({ age: { $gt: 30 } })

// 删除集合中所有文档(保留集合结构)
db.users.deleteMany({})
4. 索引操作
// 创建单字段索引(升序)
db.users.createIndex({ name: 1 })

// 创建复合索引
db.users.createIndex({ name: 1, age: -1 })

// 创建唯一索引
db.users.createIndex({ email: 1 }, { unique: true })

// 查看索引
db.users.getIndexes()

// 删除索引
db.users.dropIndex("name_1")  // 索引名格式:字段名_排序方向
5. 聚合操作
// 统计文档数量
db.users.countDocuments({ age: { $gt: 25 } })

// 分组统计(统计每个年龄段的人数)
db.users.aggregate([
  { $group: { _id: "$age", count: { $sum: 1 } } }
])

// 筛选+分组+排序(统计年龄>20的用户,按年龄段分组并排序)
db.users.aggregate([
  { $match: { age: { $gt: 20 } } },
  { $group: { _id: "$age", count: { $sum: 1 } } },
  { $sort: { _id: 1 } }
])

三、MongoDB 的使用场景

  1. 内容管理系统(CMS)

    • 灵活的文档结构适合存储各种类型的内容(文章、图片、视频等)
    • 支持快速迭代和字段扩展
  2. 实时分析平台

    • 高写入性能处理海量数据
    • 聚合框架支持复杂数据分析
  3. 用户行为日志

    • 无模式设计方便记录多变的用户行为数据
    • 水平扩展能力应对数据量增长
  4. 移动应用后端

    • 支持地理位置查询(如附近的人 / 地点)
    • 自动分片实现高可用和扩展性
  5. 缓存层

    • 高性能读写满足缓存需求
    • 灵活的数据模型适配各种缓存场景
  6. 物联网(IoT)数据存储

    • 处理大量结构化和半结构化的传感器数据
    • 支持时间序列数据高效存储

四、MongoDB 的优势

  1. 灵活的文档模型

    • 无需预定义模式,字段可动态添加和修改
    • 适合快速迭代的开发场景
  2. 高可扩展性

    • 自动分片支持水平扩展
    • 副本集提供高可用性和自动故障转移
  3. 高性能

    • 内存映射引擎(WiredTiger)提供高效读写
    • 索引支持快速查询
  4. 丰富的查询功能

    • 支持复杂查询、聚合操作和地理位置查询
    • 强大的聚合框架替代传统 SQL 的复杂查询
  5. 地理位置支持

    • 内置对地理位置数据的索引和查询支持
    • 适合开发 LBS(位置服务)应用
  6. 易于开发和维护

    • JSON 格式数据与现代编程语言和框架无缝集成
    • 减少数据转换和映射工作
  7. 强大的社区支持

    • 活跃的开源社区和完善的文档
    • 主流云平台(AWS、Azure、Google Cloud)提供官方支持

五、MongoDB 与关系型数据库的对比

特性MongoDB (NoSQL)关系型数据库 (如 MySQL)
数据模型文档模型(JSON/BSON)表格模型(固定模式)
模式灵活性无模式,动态扩展严格模式,修改成本高
查询语言类 JSON 查询语法SQL
事务支持4.0 + 支持多文档事务(弱隔离)强事务 ACID 保证
扩展性水平扩展(自动分片)垂直扩展为主
适用场景灵活、高并发、大数据量复杂关系、强事务要求

六、使用建议

  1. 避免反模式

    • 不要过度嵌套文档(嵌套层级建议不超过 3 层)
    • 避免跨集合的复杂查询(MongoDB 不支持 JOIN)
  2. 合理使用索引

    • 为高频查询字段创建索引
    • 避免创建过多索引(影响写入性能)
  3. 设计数据模型

    • 基于应用访问模式设计文档结构
    • 优先考虑读性能(大多数应用读多写少)
  4. 监控与优化

    • 使用db.collection.explain()分析查询性能
    • 定期检查慢查询日志(slowms参数)
  5. 备份策略

    • 使用mongodumpmongorestore进行全量备份
    • 结合副本集实现高可用和数据冗余
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值