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数据库操作常用功能使用详解(创建表/插入数据/获取数据)
Dec 06 Python
用python写的一个wordpress的采集程序
Feb 27 Python
Python爬虫爬验证码实现功能详解
Apr 14 Python
浅谈对yield的初步理解
May 29 Python
Python简单读取json文件功能示例
Nov 30 Python
Python爬虫实例_利用百度地图API批量获取城市所有的POI点
Jan 10 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
Python框架Flask的基本数据库操作方法分析
Jul 13 Python
Django添加favicon.ico图标的示例代码
Aug 07 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
Sep 27 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 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
PHP递归复制、移动目录的自定义函数分享
2014/11/18 PHP
php发送与接收流文件的方法
2015/02/11 PHP
php+ajax实现的点击浏览量加1
2015/04/16 PHP
php实现的简单数据库操作Model类
2016/11/16 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
AngularJS基础 ng-repeat 指令简单示例
2016/08/03 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
vue 中directive功能的简单实现
2018/01/05 Javascript
使用classList来实现两个按钮样式的切换方法
2018/01/24 Javascript
element ui里dialog关闭后清除验证条件方法
2018/02/26 Javascript
浅谈Angular 的变化检测的方法
2018/03/01 Javascript
小程序实现按下录音松开识别语音
2019/11/22 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
python基础教程之字典操作详解
2014/03/25 Python
Python实现图像几何变换
2015/07/06 Python
python Django批量导入不重复数据
2016/03/25 Python
Python用csv写入文件_消除空余行的方法
2018/07/06 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
python批量修改文件夹及其子文件夹下的文件内容
2019/03/15 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
python 基于UDP协议套接字通信的实现
2021/01/22 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
党员学习十八大感想
2014/01/17 职场文书
一份文言文检讨书
2014/09/13 职场文书
查摆问题整改措施
2014/10/24 职场文书
2016年大学生社会实践心得体会
2015/10/09 职场文书
2016年小学“感恩教师”主题队日活动总结
2016/04/01 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
抖音短视频(douyin)去水印工具的实现代码
2021/03/30 Javascript
Python django中如何使用restful框架
2021/06/23 Python