Python 操作 MongoDB 讲解详细

 更新时间:2021年09月27日 14:23:35   作者:tigeriaf  
MongoDB是一款开源的、基于分布式的、面向文档存储的非关系型数据库。拥有高性能、高可用,易扩展的优点,并且支持丰富的查询语言来支持读写操作以及更复杂的查询等。接下来我们来看一下如何使用Python操作MongoDB数据库

1、连接MongoDB

需要使用Python第三方库pymongo来连接以及操作MongoDB,可以使用pip install pymongo进行安装。 可以使用下面代码来创建一个MongoDB的连接对象。

import pymongo


client = pymongo.MongoClient(host='localhost', port=27017)

一般来说传入两个参数就可以,第一个参数为地址host(默认是localhost)第二个参数为端口port(默认是27017)。
还有一种方法是host参数直接传入MongoDB的连接字符串,例如:

client = pymongo.MongoClient('mongodb://localhost:27017')

2、指定(切换)数据库

db = client.test
# 或者
# db = client['test']

如果该数据库不存在,则自动创建,否则切换到指定数据库。 注意: 新创建的数据库,在没有插入数据之前在可视化工具里看不到。

3、指定(切换)集合

MongoDB的数据库中包含很多集合collection,类似于关系型数据库中的表,同样,我们可以使用下面和指定数据库类似的方式,指定要操作的集合。

collection = db.users
# 或者
collection = db['users']

4、插入数据

调用collection的insert_one()方法可以插入单条数据。

user = {
    'name': 'tigeriaf',
    'gender': 'male',
    'age': 24
}

collection.insert_one(user)

MongoDB中,每条数据都有一个唯一的_id属性,如果没有显式的指明_idMongoDB会自动生成ObjectId类型的_id属性。

当然我们也可以插入多条数据,使用的是insert_many()方法,数据以列表形式传递。

user_list = [
    {
        'name': 'zhangsan',
        'gender': 'male',
        'age': 25
    },
    {
        'name': 'lisi',
        'gender': 'male',
        'age': 24

    },
    {
        'name': 'wangwu',
        'gender': 'female',
        'age': 24

    }
]

collection.insert_many(user_list)

5、查询数据

通过find_one()find()方法进行数据的查询,find_one()查询返回单个结果,find()返回多个结果。

result = collection.find_one({'name': 'tigeriaf'})
print(type(result), result)

我们查询的是nametigeriaf的数据,返回结果是字典类型,运行结果如下:

<class 'dict'> {'_id': ObjectId('614be85f1cc0a98d6f034de7'), 'name': 'tigeriaf', 'gender': 'male'}

对于多条数据的查询,我们可以使用find()方法,例如在这里查找年龄为20的数据,示例如下:

results = collection.find({'gender': "male"})
print(results)
for result in results:
    print(result)

运行结果如下:

<pymongo.cursor.Cursor object at 0x0BDF8210>
{'_id': ObjectId('614be85f1cc0a98d6f034de7'), 'name': 'tigeriaf', 'gender': 'male'}
{'_id': ObjectId('614beb3ad0f17d253e2ef81c'), 'name': 'zhangsan', 'gender': 'male'}
{'_id': ObjectId('614beb3ad0f17d253e2ef81d'), 'name': 'lisi', 'gender': 'male'}

返回结果是Cursor类型,我们可以遍历取到所有的结果。

6、统计查询

可以调用count()方法来统计查询结果的条数。

count = collection.find({'gender': "male"}).count()
print(count)

7、结果排序

可以调用sort()方法对查询的数据进行排序。

results = collection.find().sort('name', pymongo.ASCENDING)
for result in results:
    print(result)

运行结果如下:

{'_id': ObjectId('614bf7fca5af6d1d46df0878'), 'name': 'lisi', 'gender': 'male', 'age': 24}
{'_id': ObjectId('614bf72ab1b973eae1b32fee'), 'name': 'tigeriaf', 'gender': 'male', 'age': 24}
{'_id': ObjectId('614bf7fca5af6d1d46df0879'), 'name': 'wangwu', 'gender': 'female', 'age': 24}
{'_id': ObjectId('614bf7fca5af6d1d46df0877'), 'name': 'zhangsan', 'gender': 'male', 'age': 25}

8、偏移

在某些情况下我们可能只想获取某几条数据,可以使用skip()方法进行偏移操作,比如skip(2) ,就忽略前2条数据,得到第3条之后的数据。

results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
for result in results:
    print(result)

运行结果如下:

{'_id': ObjectId('614bf7fca5af6d1d46df0879'), 'name': 'wangwu', 'gender': 'female', 'age': 24}
{'_id': ObjectId('614bf7fca5af6d1d46df0877'), 'name': 'zhangsan', 'gender': 'male', 'age': 25}

另外还可以使用limit()方法限制结果个数。

results = collection.find().sort('name', pymongo.ASCENDING).skip(1).limit(2)
for result in results:
    print(result)

运行结果如下:

{'_id': ObjectId('614bf72ab1b973eae1b32fee'), 'name': 'tigeriaf', 'gender': 'male', 'age': 24}
{'_id': ObjectId('614bf7fca5af6d1d46df0879'), 'name': 'wangwu', 'gender': 'female', 'age': 24}

9、更新数据

可以使用update_one()方法和update_many()方法对数据进行更新,update_one()方法更新一条数据,update_many()方法更新多条数据。

condition = {'name': 'wangwu'}
user = collection.find_one(condition)
user['age'] += 1
result = collection.update_one(condition, {'$set': user})
print(result)
print(result.matched_count, result.modified_count)

在这里调用了update_one()方法修改namewangwu的数据,第二个参数需要使用$类型操作符作为字典的键名,返回结果调用matched_countmodified_count属性可以获得匹配的数据条数和影响的数据条数。

运行结果如下:

<pymongo.results.UpdateResult object at 0x0C96E738>
1 1

调用update_many()方法会更新所有符合条件的数据。

condition = {'age': 24}
result = collection.update_many(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)

上述代码指定了查询条件为age等于24,然后更新条件为{'$inc': {'age': 1}} ,也就是age加1。

<pymongo.results.UpdateResult object at 0x0CB628A0>
2 2

可以看到更新了多条数据。

10、删除数据

可以使用delete_one()方法和delete_many()方法删除数据,delete_one()方法删除一条数据,delete_many()方法删除多条数据。

result = collection.delete_one({'name': 'zhangsan'})
print(result.deleted_count)
result = collection.delete_many({'gender': "male"})
print(result.deleted_count)

运行结果如下:

1
2

delete_one()删除的是第一条符合条件的数据,delete_many()删除的是所有符合条件的数据。

到此这篇关于Python 操作 MongoDB 讲解详细的文章就介绍到这了,更多相关Python 操作 MongoDB内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 批量添加的button 使用同一点击事件的方法

    python 批量添加的button 使用同一点击事件的方法

    今天小编就为大家分享一篇python 批量添加的button 使用同一点击事件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • Pyecharts V1和V0.5之间相互切换的方法

    Pyecharts V1和V0.5之间相互切换的方法

    这篇文章主要介绍了Pyecharts V1和V0.5之间相互切换的方法,Pyecharts这个可视化库火爆,官方如是说:Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可,下面和小编一起进入文章了解具体内容吧
    2022-02-02
  • python实现可变变量名方法详解

    python实现可变变量名方法详解

    在本篇文章里小编给大家整理了关于python实现可变变量名的相关知识点内容以及实例代码,需要的朋友们参考下。
    2019-07-07
  • python结合opencv实现人脸检测与跟踪

    python结合opencv实现人脸检测与跟踪

    在Python下用起来OpenCV很爽,代码很简洁,很清晰易懂。使用的是Haar特征的分类器,训练之后得到的数据存在一个xml中。下面我们就来详细谈谈。
    2015-06-06
  • Python使用pytest-playwright的原因分析

    Python使用pytest-playwright的原因分析

    pytest-playwright 是一个 Python 包,它允许您使用 Microsoft 的 Playwright 库在 Python 项目中进行端到端测试,这篇文章主要介绍了Python为什么使用pytest-playwright,需要的朋友可以参考下
    2023-03-03
  • Django 查询数据库返回JSON的实现

    Django 查询数据库返回JSON的实现

    和前端交互全部使用JSON,如何将数据库查询结果转换成JSON格式,本文就来介绍一下,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Python中logging日志模块代码调试过程详解

    Python中logging日志模块代码调试过程详解

    这篇文章主要介绍了Python中logging日志模块代码调试,今天来看看如何在代码中定义日志,并探讨日志的权限,需要的朋友可以参考下
    2023-04-04
  • Python实现爬虫从网络上下载文档的实例代码

    Python实现爬虫从网络上下载文档的实例代码

    小编最近在研究python,接触到了爬虫,本文给大家带来了Python实现爬虫从网络上下载文档的知识。下面小编把具体实例代码分享到脚本之家平台,感兴趣的朋友参考下吧
    2018-06-06
  • Python常驻任务实现接收外界参数代码解析

    Python常驻任务实现接收外界参数代码解析

    这篇文章主要介绍了Python常驻任务实现接收外界参数代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • python目录与文件名操作例子

    python目录与文件名操作例子

    这篇文章主要介绍了python目录与文件名操作例子,需要的朋友可以参考下
    2016-08-08

最新评论