Python pymongo模块用法示例
本文实例讲述了Pythonpymongo模块用法。分享给大家供大家参考,具体如下:
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驱动:
pipinstallpymongo
下面是一些操作例子:
#coding=utf-8
importrandom
importpymongo
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
printrs.inserted_id#打印插入的对象id
#插入多条
rs=coll.insert_many([{'a':random.randint(1,10),'b':10}
for_inrange(10)])
printrs.inserted_ids#打印插入的对象id列表
#查询单条(符合的第一条)
printcoll.find_one({'a':1,'b':2})
#集合当前全部文档数
printcoll.count()
cursor=coll.find({'a':{'$lte':1}})#查询结果是一个游标
printcursor.count()#符合查询的文档数
forrincursor:
printr,r['b']#打印符合查询的文档内容,以及其中b键的值
#注意,这个循环只能进行一次.如果想再获得需要重新find或者使用list(cursor)把结果存起来
#对查询结果排序
printlist(coll.find({'a':{'$lte':1}}).sort([('b',-1)]))
#-1也可以表示为pymongo.DESCENDING
#对查询结果可以限制返回文档数,控制跳过的结果数
printcoll.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)
printrs#返回更新前的文档
#同样的还有find_one_and_replace和find_one_and_delete
printlist(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}的记录,但是会新建一个
printcoll.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获得删除的数量
printrs.deleted_count
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python数学运算技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》
希望本文所述对大家Python程序设计有所帮助。