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 相关文章推荐
ptyhon实现sitemap生成示例
Mar 30 Python
详解python3 + Scrapy爬虫学习之创建项目
Apr 12 Python
解决pyqt5中QToolButton无法使用的问题
Jun 21 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
Pandas分组与排序的实现
Jul 23 Python
windows 10 设定计划任务自动执行 python 脚本的方法
Sep 11 Python
python 使用shutil复制图片的例子
Dec 13 Python
将python文件打包exe独立运行程序方法详解
Feb 12 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
opencv 分类白天与夜景视频的方法
Jun 05 Python
请求模块urllib之PYTHON爬虫的基本使用
Apr 08 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
是否存在第一台收音机的说法
2021/03/01 无线电
PHP中header和session_start前不能有输出原因分析
2013/01/11 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
2014/10/16 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JQuery获取元素文档大小、偏移和位置和滚动条位置的方法集合
2010/01/12 Javascript
JavaScript创建对象的写法
2013/08/29 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
往光标所在位置插入值的js代码
2013/09/22 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
深入理解jquery中的each用法
2016/12/14 Javascript
使用jquery判断一个元素是否含有一个指定的类(class)实例
2017/02/12 Javascript
微信小程序实现带刻度尺滑块功能
2017/03/29 Javascript
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
jQuery中过滤器的基本用法示例
2017/10/11 jQuery
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
浅谈JavaScript面向对象--继承
2019/03/20 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
原生js实现分页效果
2020/09/23 Javascript
[02:05]2014DOTA2西雅图邀请赛 老队长全明星大猜想谁不服就按进显示器
2014/07/08 DOTA
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
python 运算符 供重载参考
2009/06/11 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
Python进程间通信用法实例
2015/06/04 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python自动生成model文件过程详解
2019/11/02 Python
python常用运维脚本实例小结
2020/02/14 Python
pandas针对excel处理的实现
2021/01/15 Python
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
生产部主管岗位职责
2014/01/06 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
写给老婆的保证书
2015/02/27 职场文书
离婚协议书范本(2016最新版)
2016/03/18 职场文书
SQL Server2019数据库备份与还原脚本,数据库可批量备份
2021/11/20 SQL Server