Python pymongo模块用法详解与示例

Ada
Ada
发布时间:2026-10-13 | 5人浏览过
原创

本文详细介绍Python中pymongo模块的安装方法及核心用法。内容涵盖MongoDB的优势、驱动安装步骤,并通过完整代码示例演示数据库连接、集合操作、单条及批量插入、条件查询、排序、更新与删除等常用功能,帮助开发者快速掌握MongoDB在Python中的应用。

本文通过具体实例解析Python中pymongo模块的使用方法,旨在为读者提供实用的参考代码与说明。

MongoDB的优势

MongoDB是专为现代Web应用设计的NoSQL数据库,具备以下显著优点:

1、文档型存储。可将关系型数据库中的表类比为电子表格,其中列代表字段,每行记录是按字段顺序排列的值元组。而在MongoDB中,数据以键-值对形式存储,且值可以是任意类型并支持嵌套。过去使用关系型数据库时,产品信息往往分散在多个表中,需通过关联表或复杂的SQL JOIN语句才能获取所需数据。现在,我们可以将产品信息集中存储,无需预先定义固定的模式,极大提升了灵活性。

2、采用高效的二进制BSON格式进行数据存储。BSON是一种类JSON格式,选择BSON不仅提供了比JSON更丰富的内置数据类型,还能实现更快的数据遍历速度。

3、内置高可用性及分片解决方案,保障系统的稳定与扩展性。

4、支持基于文档的富查询语言。MongoDB允许动态查询,提供多种查询方式,并支持对文档属性建立索引以优化性能。

5、内置聚合工具,支持通过MapReduce等方式进行复杂的统计分析和并行计算。

6、自3.0版本起,MongoDB引入了高性能、可扩展且支持压缩文档级锁的数据存储引擎WiredTiger。官方性能测试表明,使用该新存储引擎可使性能提升4至7倍。

安装MongoDB的Python驱动:

pip install pymongo

以下展示一些具体的操作示例:

# coding=utf-8
import random
import pymongo
client = pymongo.MongoClient('mongodb://localhost:27017/')
client.drop_database('test') # 保证之前没有数据, 删除名为test的数据库
db = client.test # 使用test这个数据库
coll = db.coll # 使用coll这个集合
# 插入单条
rs = coll.insert_one({'a': 1, 'b': 2})
object_id = rs.inserted_id
print rs.inserted_id # 打印插入的对象id
# 插入多条
rs = coll.insert_many([{'a': random.randint(1, 10), 'b': 10}
            for _ in range(10)])
print rs.inserted_ids # 打印插入的对象id列表
# 查询单条(符合的第一条)
print coll.find_one({'a': 1, 'b': 2})
# 集合当前全部文档数
print coll.count()
cursor = coll.find({'a': {'$lte': 1}}) # 查询结果是一个游标
print cursor.count() # 符合查询的文档数
for r in cursor:
  print r, r['b'] # 打印符合查询的文档内容, 以及其中b键的值
# 注意, 这个循环只能进行一次. 如果想再获得需要重新find或者使用list(cursor)把结果存起来
# 对查询结果排序
print list(coll.find({'a': {'$lte': 1}}).sort([('b', -1)]))
# -1也可以表示为pymongo.DESCENDING
# 对查询结果可以限制返回文档数, 控制跳过的结果数
print coll.find({'b': {'$gt': 1}}).limit(1).skip(1).next() # next相当于find_one
# 找到后更新, 下面例子第一个参数是过滤条件, 第二个参数是要更新的操作(设置b为3, a自增长1)
# upsert为True表示找不到会创建一个,也就是get_or_create
rs = coll.find_one_and_update({'a': 1, 'b': 2},
               {'$set': {'b': 3}, '$inc': {'a': 1}},
               upsert=False)
print rs # 返回更新前的文档
# 同样的还有find_one_and_replace和find_one_and_delete
print list(coll.find({'a': 2, 'b': 3})) # 上述文档已经被更新为这个文档
coll.find_one_and_update({'a': 1, 'b': 2},
             {'$set': {'b': 3}, '$inc': {'a': 1}},
             upsert=True) # 虽然没有符合{'a': 1, 'b': 2}的记录,但是会新建一个
print coll.find({'a': 2, 'b': 3}).count() # 发现现在有2条文档记录了
# 删除单个文档
coll.delete_one({'a': 2, 'b': 3})
# 一次性删除多个文档
rs = coll.delete_many({'a': 2, 'b': 3})
# 如果没有符合的条目也不会提示, 但是可以通过rs.deleted_count获得删除的数量
print rs.deleted_count

如需了解更多Python相关知识,可参考本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。

希望本文所述内容能对大家的Python程序设计有所帮助。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表