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

MongoDB学习

MongoDB 是一种流行的 NoSQL 数据库,以文档存储为核心,适用于高灵活性、高扩展性的场景。本文将从基础概念到实际应用,带你快速掌握 MongoDB 的核心操作。

1. MongoDB 简介
  • 什么是 MongoDB?
    MongoDB 是一个基于分布式文件存储的数据库,采用 BSON(类似 JSON)格式 存储数据,支持动态 schema(无固定表结构)。
  • 核心特性
    • 文档模型:数据以键值对形式存储在文档中,类似 JSON 对象。
    • 高扩展性:支持水平扩展(分片集群)。
    • 高性能:内存映射、索引优化、聚合管道等机制提升查询效率。
    • 灵活查询:支持丰富的查询语法和聚合操作。
  • 适用场景
    • Web 应用(用户配置、日志存储)
    • 实时数据分析(如物联网传感器数据)
    • 内容管理系统(CMS)
2. 安装与基本配置
2.1 安装 MongoDB
  • Windows/Mac/Linux:从 MongoDB 官网 下载社区版安装包。
  • Docker 快速启动
docker run -d --name mongo -p 27017:27017 mongo:latest
2.2 启动服务与连接
  • 启动 MongoDB 服务:
mongod --dbpath=/data/db  # 指定数据存储路径
  • 连接 MongoDB Shell:
mongosh  # 进入交互式命令行
3. 核心概念
  • 数据库(Database):一个 MongoDB 实例可包含多个数据库。
  • 集合(Collection):相当于关系型数据库中的“表”,存储一组文档。
  • 文档(Document):数据的基本单位,格式为 BSON(如 {name: "Alice", age: 25})。
4. 基础操作(CRUD)
4.1 创建与切换数据库
use mydb  // 切换到(或创建)mydb数据库
4.2 插入文档
// 插入单条文档
db.users.insertOne({
  name: "Alice",
  age: 30,
  hobbies: ["reading", "coding"]
});

// 批量插入
db.users.insertMany([
  {name: "Bob", age: 25},
  {name: "Charlie", age: 35}
]);
4.3 查询文档
// 查询所有文档
db.users.find();

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

// 投影查询(只返回name字段)
db.users.find({}, {name: 1});
4.4 更新文档
// 更新单条文档(将Alice的年龄改为31)
db.users.updateOne(
  {name: "Alice"},
  {$set: {age: 31}}
);

// 更新多条文档(年龄增加1)
db.users.updateMany(
  {},
  {$inc: {age: 1}}
);
4.5 删除文档
// 删除单条文档
db.users.deleteOne({name: "Bob"});

// 删除集合中的所有文档
db.users.deleteMany({});
5. 高级功能
5.1 索引优化
// 创建单字段索引
db.users.createIndex({age: 1});  // 1表示升序,-1表示降序

// 查看索引
db.users.getIndexes();
5.2 聚合管道(Aggregation)
// 统计各年龄用户数量
db.users.aggregate([
  {$group: {_id: "$age", count: {$sum: 1}}}
]);
6. 与 Python 集成(PyMongo)
6.1 安装驱动
pip install pymongo
6.2 连接与操作
from pymongo import MongoClient

# 连接数据库
client = MongoClient("mongodb://localhost:27017/")
db = client["mydb"]
collection = db["users"]

# 插入文档
user = {"name": "David", "age": 28}
collection.insert_one(user)

# 查询文档
result = collection.find_one({"name": "David"})
print(result)  # {'_id': ObjectId('...'), 'name': 'David', 'age': 28}

相关文章:

  • CASS11快捷键设置
  • 国内三大知名开源批发订货系统对比
  • 【React】React 基础(2)
  • 深度解读DeepSeek:从原理到模型
  • Cursor不能白嫖还不安全:Cline + DeepSeek V3,最强国产双开源解决方案
  • C语言内存函数
  • 【MATLAB例程】RSSI/PLE定位与卡尔曼滤波NLOS抑制算法,附完整代码
  • 智能自动化新纪元:AI与UiPath RPA的协同应用场景与技术实践
  • vscode软件中引入vant组件
  • leetcode hot100-34 合并K个升序链表
  • 什么是Firehose?它的作用是什么?
  • 蓝桥杯笔记——递归递推
  • FTP 实验(ENSP模拟器实现)
  • 力扣-贪心-53 最大子数组和
  • LeetCode刷题---二分查找---287
  • Java 大视界 -- Java 大数据未来十年的技术蓝图与发展愿景(95)
  • DeepSeek+Cherry Studio实现本地私有满血版
  • 企业微信第三方应用开发025_企微通讯录组件使用04_vue中使用ww-open-data通讯录展示组件---企业微信开发027
  • 《深度剖析:AI与姿态估计技术在元宇宙VR交互中的应用困境》
  • 记录Unity一个奇妙bug
  • 巴基斯坦军方:印度袭击已致巴方31人死亡
  • 公元1057年:千年龙虎榜到底有多厉害?
  • 习近平《在庆祝中华全国总工会成立100周年暨全国劳动模范和先进工作者表彰大会上的讲话》单行本出版
  • 山东滕州市醉驾交通事故肇事人员已被刑拘
  • 五一假期上海楼市延续向好态势,成交量同比增加36%
  • 以色列计划“占领加沙”,特朗普下周中东行结束之际将是“机会窗口”