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

MongoDB数据类型与python操作

一、MongoDB 数据类型

MongoDB 作为文档型数据库,支持丰富的数据类型,主要包括:

  1. 基本类型

    • 字符串(String):UTF-8 编码,支持索引。
    • 数值(Number):包括 32 位整数(int)、64 位整数(long)、双精度浮点数(double,默认)、Decimal128(高精度小数)。
    • 布尔值(Boolean):true 或 false
    • 空值(Null):表示空值或不存在的字段。
  2. 复合 / 特殊类型

    • 对象 ID(ObjectId):12 字节唯一标识符,默认作为文档 _id 主键,包含时间戳、机器 ID 等信息。
    • 日期(Date):存储 Unix 时间戳(毫秒级),不包含时区。
    • 数组(Array):可包含多种类型元素,支持索引和查询(如 $in$all)。
    • 嵌入式文档(Embedded Document):文档中嵌套另一个文档,实现数据聚合。
    • 二进制数据(Binary Data):存储图片、文件等二进制内容。
    • 正则表达式(Regular Expression):支持正则匹配查询。
    • 地理空间类型(Geospatial):如 Point(点)、LineString(线),支持地理位置查询。

二、MongoDB 与 MySQL、Redis 的对比

维度MongoDB(文档型)MySQL(关系型)Redis(键值型)
数据模型文档(类似 JSON 的 BSON),支持嵌套和数组二维表(行 + 列),遵循关系模型(外键关联)键值对(Key-Value),支持多种结构(字符串、哈希、列表等)
存储方式磁盘存储(支持内存映射优化)磁盘存储(InnoDB 等引擎)内存存储(可持久化到磁盘)
事务支持4.0+ 支持多文档事务,弱于 MySQL强事务支持(ACID 完整)单命令原子性,5.0+ 支持多命令事务
扩展性天然支持分片(水平扩展)需分库分表(复杂)支持集群分片,扩展灵活
查询能力丰富的查询语法(嵌套查询、聚合管道)SQL 语法,支持复杂联表查询简单键查询,依赖数据结构特性
适用场景非结构化 / 半结构化数据(日志、内容管理)、快速迭代业务结构化数据(订单、用户信息)、强事务需求缓存、计数器、实时会话、高频读写场景

三、关系型数据库(RDBMS)与非关系型数据库(NoSQL)的核心区别

特性关系型数据库(如 MySQL)非关系型数据库(如 MongoDB、Redis)
数据结构固定 schema(表结构预定义)动态 schema(灵活扩展,无需预定义)
关联处理依赖外键和联表查询(JOIN)避免关联,通过嵌套或冗余存储数据
事务与一致性强一致性(ACID)最终一致性(BASE),牺牲部分一致性换性能
扩展性垂直扩展为主(升级硬件),水平扩展复杂水平扩展为主(增加节点),天然支持分布式
适用场景结构化数据、事务密集型(金融、电商订单)非结构化数据、高并发读写、快速迭代(社交、日志)

四、Python 操作 MongoDB

Python 中通过 pymongo 库操作 MongoDB,步骤如下:

1. 安装依赖
pip install pymongo
2. 基本操作示例
from pymongo import MongoClient
from bson.objectid import ObjectId  # 用于处理 ObjectId# 1. 连接 MongoDB(默认地址:localhost:27017)
client = MongoClient("mongodb://localhost:27017/")# 2. 创建/选择数据库(不存在则自动创建)
db = client["mydatabase"]# 3. 创建/选择集合(类似表)
collection = db["mycollection"]# 4. 插入文档
# 插入单条
doc = {"name": "Alice", "age": 30, "hobbies": ["reading", "hiking"]}
result = collection.insert_one(doc)
print("插入的文档 ID:", result.inserted_id)# 插入多条
docs = [{"name": "Bob", "age": 25, "city": "New York"},{"name": "Charlie", "age": 35, "city": "London"}
]
result = collection.insert_many(docs)
print("插入的多条文档 ID:", result.inserted_ids)# 5. 查询文档
# 查询单条
print(collection.find_one({"name": "Alice"}))# 查询多条(年龄 > 28)
for doc in collection.find({"age": {"$gt": 28}}):print(doc)# 6. 更新文档
# 更新单条(将 Alice 的年龄改为 31)
collection.update_one({"name": "Alice"},{"$set": {"age": 31}}
)# 7. 删除文档
# 删除单条(删除 name 为 Bob 的文档)
collection.delete_one({"name": "Bob"})# 8. 索引(提升查询性能)
collection.create_index("name", unique=True)  # 唯一索引
3. 高级操作
  • 聚合查询:使用 aggregate 实现分组、过滤等复杂计算:

    # 按城市分组,统计每个城市的人数
    pipeline = [{"$group": {"_id": "$city", "count": {"$sum": 1}}}
    ]
    for result in collection.aggregate(pipeline):print(result)
    
  • 分页查询:使用 skip 和 limit

    # 跳过前 1 条,取 2 条
    collection.find().skip(1).limit(2)
    

总结:MongoDB 适合灵活的非结构化数据场景,与 MySQL(强事务)、Redis(高性能缓存)互补;Python 通过 pymongo 可便捷操作 MongoDB,支持增删改查及复杂聚合。

http://www.dtcms.com/a/403310.html

相关文章:

  • 脑电模型实战系:脑电模型进阶-构建一个高效的全连接网络
  • 东莞网站建设怎么收费展会布置效果图
  • 滕滕州网站建设住房和建设局官网
  • Vue调用本地EXE程序
  • Vue2 全局事件总线:通俗易懂 + 简单案例
  • Flask模板中使用Vue、ant-design-vue、@ant-design/icons-vue示例模板
  • 石狮建设局网站保定网站建设系统
  • vLLM PD分离推理服务配置指南
  • C++ 学习与 CLion 使用:(十五)多文件编程,和C语言一样的多文件编程
  • BEAT币
  • 淘宝的网站怎么做公司网站如何被收录
  • Ansible实现自动化运维
  • Zabbix7.4.8(三):通过Zabbix agent 2监控Docker相关指标
  • 小型个人网站制作网页打不开的原因及解决方法
  • Ansible 入门到实战:自动化运维的瑞士军刀
  • 嵌入式学习---(linux驱动)
  • k8s集群与gitlab registry连接
  • MySQL笔记---对表的操作
  • 【实战避坑】MySQL修改表字段长度完整指南:从语法、锁表机制到在线DDL详解
  • 乐峰网网站是谁做的海门住房和城乡建设局网站
  • 做公司简介的开源网站做网站推广前途
  • 了解学习Nginx反向代理与缓存功能
  • 【黑马程序员】后端Web基础--Maven基础和基础知识
  • Linux系统Nginx服务(三)
  • 新手向 算法 基数排序-yang
  • 怎么搭建php网站网页设计个人网站设计
  • 小淇云库-Python 虚拟环境选择:venv、conda、poetry 的适用场景对比
  • 芋道源码 - RabbitMQ + WebSocket 实现分布式消息推送
  • Spring Data JPA 语法详解与使用案例
  • 网站开发面试题天津公司建设网站