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计算书页码的统计数字问题实例
Sep 26 Python
Python计算回文数的方法
Mar 11 Python
python统计文本字符串里单词出现频率的方法
May 26 Python
django创建自定义模板处理器的实例详解
Aug 14 Python
对Python w和w+权限的区别详解
Jan 23 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
python实现批量视频分帧、保存视频帧
May 31 Python
python turtle 绘制太极图的实例
Dec 18 Python
Python建造者模式案例运行原理解析
Jun 29 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
用ldap作为django后端用户登录验证的实现
Dec 07 Python
编写python程序的90条建议
Apr 14 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 number_format() 函数定义和用法
2012/06/01 PHP
php页面消耗内存过大的处理办法
2013/03/18 PHP
Ajax+PHP实现的模拟进度条功能示例
2019/02/11 PHP
js 动态文字滚动的例子
2011/01/17 Javascript
快速查找数组中的某个元素并返回下标示例
2013/09/03 Javascript
IE8的JavaScript点击事件(onclick)不兼容的解决方法
2013/11/22 Javascript
js的回调函数详解
2015/01/05 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
后端接收不到AngularJs中$http.post发送的数据原因分析及解决办法
2016/07/05 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
js替换字符串中所有指定的字符(实现代码)
2016/08/17 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
2016/09/05 Javascript
BootStrap表单时间选择器详解
2017/05/09 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
Angular封装搜索框组件操作示例
2019/04/25 Javascript
[55:45]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第一局
2016/02/28 DOTA
wxPython中文教程入门实例
2014/06/09 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python实现微信自动好友验证,自动回复,发送群聊链接方法
2019/02/21 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
Python通过len函数返回对象长度
2020/10/22 Python
Qoo10马来西亚:全球时尚和引领潮流的购物市场
2016/08/25 全球购物
Pam & Gela官网:美国性感前卫女装品牌
2018/07/19 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
如何为DataGridView添加一个定制的Column Type
2014/01/21 面试题
医药营销专业个人自荐信
2013/09/29 职场文书
学校岗位设置方案
2014/01/16 职场文书
幼教简历自我评价
2014/01/28 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
2016年元旦主持词
2015/07/06 职场文书
MySQL详细讲解变量variables的用法
2022/06/21 MySQL