热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Python操作MongoDB的示例分析

这篇文章给大家分享的是有关Python操作MongoDB的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、连接Mongo

这篇文章给大家分享的是有关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)

Python操作MongoDB的示例分析

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)

Python操作MongoDB的示例分析

5、查询数据

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

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

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

 {'_id': ObjectId('614be85f1cc0a98d6f034de7'), 'name': 'tigeriaf', 'gender': 'male'}

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

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

运行结果如下:


{'_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属性可以获得匹配的数据条数和影响的数据条数。

运行结果如下:


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。


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的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!


推荐阅读
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
  • 本文介绍了为什么要使用多进程处理TCP服务端,多进程的好处包括可靠性高和处理大量数据时速度快。然而,多进程不能共享进程空间,因此有一些变量不能共享。文章还提供了使用多进程实现TCP服务端的代码,并对代码进行了详细注释。 ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
author-avatar
BB15107669916
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有