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笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
举例讲解Python中的算数运算符的用法
May 13 Python
python 循环遍历字典元素的简单方法
Sep 11 Python
Python推导式简单示例【列表推导式、字典推导式与集合推导式】
Dec 04 Python
pyQT5 实现窗体之间传值的示例
Jun 20 Python
Pandas之DataFrame对象的列和索引之间的转化
Jun 25 Python
django 配置阿里云OSS存储media文件的例子
Aug 20 Python
对Python中一维向量和一维向量转置相乘的方法详解
Aug 26 Python
python根据文本生成词云图代码实例
Nov 15 Python
python实现一个点绕另一个点旋转后的坐标
Dec 04 Python
Python读取VOC中的xml目标框实例
Mar 10 Python
Python Selenium异常处理的实例分析
Feb 28 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
DedeCMS dede_channeltype表字段注释
2010/04/07 PHP
php注册审核重点解析(数据访问)
2017/05/23 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
jquery ajax的success回调函数中实现按钮置灰倒计时
2013/11/19 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
详解JavaScript表单验证(E-mail 验证)
2016/03/31 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
JS获得一个对象的所有属性和方法实例
2017/02/21 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
angular 实现同步验证器跨字段验证的方法
2019/04/11 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
[05:26]TI10典藏宝瓶套装外观展示
2020/07/03 DOTA
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
Python的迭代器和生成器
2015/07/29 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
Django中针对基于类的视图添加csrf_exempt实例代码
2018/02/11 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
Python实现确认字符串是否包含指定字符串的实例
2018/05/02 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Django框架教程之中间件MiddleWare浅析
2019/12/29 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
突袭HTML5之Javascript API扩展4—拖拽(Drag/Drop)概述
2013/01/31 HTML / CSS
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
给排水专业应届生求职信
2013/10/12 职场文书
党员的自我评价范文
2014/01/02 职场文书
教师评优事迹材料
2014/01/10 职场文书
农村改厕实施方案
2014/03/22 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
记账会计岗位职责
2014/06/16 职场文书
小班上学期个人总结
2015/02/12 职场文书
工程服务质量承诺书
2015/04/29 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android