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 相关文章推荐
python二分法实现实例
Nov 21 Python
python插入排序算法实例分析
Jul 03 Python
Python注释详解
Jun 01 Python
再谈Python中的字符串与字符编码(推荐)
Dec 14 Python
python3制作捧腹网段子页爬虫
Feb 12 Python
python 全文检索引擎详解
Apr 25 Python
解析Python的缩进规则的使用
Jan 16 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
Python图像处理库PIL的ImageEnhance模块使用介绍
Feb 26 Python
python判断all函数输出结果是否为true的方法
Dec 03 Python
python 中[0]*2与0*2的区别说明
May 10 Python
实操Python爬取觅知网素材图片示例
Nov 27 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
探讨如何把session存入数据库
2013/06/07 PHP
PHP 实现类似js中alert() 提示框
2015/03/18 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
jquery一句话全选/取消全选
2011/03/01 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
JavaScript操作HTML元素和样式的方法详解
2015/10/21 Javascript
基于javascript实现checkbox复选框实例代码
2016/01/28 Javascript
javascript函数自动执行常用方法汇总
2016/03/28 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
JavaScrip关于创建常量的知识点
2017/12/07 Javascript
pace.js和NProgress.js两个加载进度插件的一点小总结
2018/01/31 Javascript
浅谈vue中使用编辑器vue-quill-editor踩过的坑
2020/08/03 Javascript
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python 中random模块的常用方法总结
2017/07/08 Python
pandas的唯一值、值计数以及成员资格的示例
2018/07/25 Python
matplotlib.pyplot绘图显示控制方法
2019/01/15 Python
Python基础知识点 初识Python.md
2019/05/14 Python
如何定义TensorFlow输入节点
2020/01/23 Python
怎么快速自学python
2020/06/22 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
网络工程专业毕业生推荐信
2013/10/28 职场文书
部队领导证婚词
2014/01/12 职场文书
中国文明网签名寄语
2014/01/18 职场文书
网上蛋糕店创业计划书
2014/01/24 职场文书
小学教师个人先进事迹材料
2014/05/17 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
副总经理党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/06 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书