Python pymongo模块用法示例


Posted in Python onMarch 31, 2018

本文实例讲述了Python pymongo模块用法。分享给大家供大家参考,具体如下:

MongoDB优点

MongoDB是一个为当代web应用而生的noSQL数据库,它有如下优点:

1、文档型存储。可以把关系型数据库的表理解为一个电子表格,列表示字段,每行的记录其实是按照列的字段顺序排列的值得元组。而存储在MongoDB中的文档被存储为键-值对的形式,值却可以是任意类型且可以嵌套。之前在用关系型数据库的时候,我们把产品信息打散到不同的表中,要通过关系表或者使用join拼接成复杂的SQL语句的方式才能获得需要的数据。现在我们可以更多地把产品信息放在一起,也不需要提前预定产品信息的模式。多好。

2、使用高效的二进制BSON作为数据存储,BSON是一个类JSON的格式,选择BSON可以提供更快的遍历速度,提供比JSON更多地内置数据类型。

3、自带高可用及分区的解决方案。

4、基于文档的富查询语言。MongoDB支持动态查询,支持非常多的查询方式,并且可以对文档中的属性建立索引。

5、内置聚合工具。可以通过MapReduce等方式进行复杂的统计和并行计算。

6、MongoDB在3.0 之后增加了高性能,可伸缩,支持压缩文档级锁的数据存储引擎(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 相关文章推荐
Windows下Python使用Pandas模块操作Excel文件的教程
May 31 Python
Python安装官方whl包和tar.gz包的方法(推荐)
Jun 04 Python
Python操作Sql Server 2008数据库的方法详解
May 17 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
python模块常用用法实例详解
Oct 17 Python
解决python 上传图片限制格式问题
Oct 30 Python
Python表达式的优先级详解
Feb 18 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
解决PyCharm IDE环境下,执行unittest不生成测试报告的问题
Sep 03 Python
Python向MySQL批量插数据的实例讲解
Mar 31 #Python
Python将图片转换为字符画的方法
Jun 16 #Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 #Python
Python+OpenCV实现车牌字符分割和识别
Mar 31 #Python
python Opencv将图片转为字符画
Feb 19 #Python
python实现批量按比例缩放图片效果
Mar 30 #Python
python放大图片和画方格实现算法
Mar 30 #Python
You might like
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
[原创]CI(CodeIgniter)简单统计访问人数实现方法
2016/01/19 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
2019/05/05 PHP
表单切换,用回车键替换Tab健(不支持IE)
2011/07/20 Javascript
javascript中数组array及string的方法总结
2014/11/28 Javascript
JQuery判断radio(单选框)是否选中和获取选中值方法总结
2015/04/15 Javascript
javascript判断变量是否有值的方法
2015/04/20 Javascript
jQuery的end()方法使用详解
2015/07/15 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
JS高级运动实例分析
2016/12/20 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
微信小程序非跳转式组件授权登录的方法示例
2019/05/22 Javascript
layui实现form表单同时提交数据和文件的代码
2019/10/25 Javascript
JS图片预加载三种实现方法解析
2020/05/08 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
vue项目如何监听localStorage或sessionStorage的变化
2021/01/04 Vue.js
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
python数据结构之列表和元组的详解
2017/09/23 Python
Python反射用法实例简析
2017/12/22 Python
python批量修改文件编码格式的方法
2018/05/31 Python
Python实现模拟登录网易邮箱的方法示例
2018/07/05 Python
python使用装饰器作日志处理的方法
2019/07/11 Python
python中return如何写
2020/06/18 Python
keras 指定程序在某块卡上训练实例
2020/06/22 Python
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
幼儿园托班开学寄语
2014/01/18 职场文书
教师业务学习制度
2014/01/25 职场文书
师德建设实施方案
2014/03/21 职场文书
开场白怎么写
2015/06/01 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
Python实现学生管理系统并生成exe可执行文件详解流程
2022/01/22 Python