pymongo
项目需要,用到mongodb数据库,为了写些简单的脚本,来学习下pymongo的基础操作。
安装和使用pymongo
1 | ~]# pip install -U pymongo |
连接认证数据库
1 | import pymongo |
2 | |
3 | client=pymongo.MongoClient("mongodb://127.0.0.1:27017") |
4 | db=client.admin #设置了auth |
5 | db.authenticate(name="jusene",password='123456') #获得userAdminAnyDatabase权限 |
创建一个数据库
1 | testdb=client.testdb |
2 | testdb.add_user(name='testdb',password='123456',read_only=None) #设置了auth,需要为这个数据库添加用户认证 |
3 | testdb.authenticate('testdb','123456') #auth该数据库 |
创建并插入collection
1 | coll=testdb.testcoll |
2 | result=coll.insert_one({"address":"127.0.0.1"}) |
3 | result=coll.insert_many([{"x":i} for i in range(10)]) 插入多条数据 |
查询数据
1 | cursor=coll.find() #查询全部的documents,返回一个迭代器 |
2 | cursor=coll.find({"address":"127.0.0.1"}) #查询特定的内容的documet,返回一个迭代器 |
3 | cursor=coll.find({"grade.low":20}) #查询存在多层数据结构的document |
4 | cursor=coll.find({"grades.grade":"80"}) #查询的对象是一个迭代的数据结构,在这个迭代的数据结构是否存在符合的document |
5 | cursor=coll.find({"grades.score":{"$gt":30}}) #查找大于该数值的document |
6 | cursor=coll.find({"grades.score":{"$lt":30}}) #查找小于该数值的document |
7 | cursor=coll.find({"address":127.0.0.1,"grades.score":{"$gt":30}}) #AND条件查询 |
8 | cursor=coll.find({"$or":[{"address":"127.0.0.1"},{"grades.score":50}]}) #OR条件查询 |
9 | cursor=coll.find().sort("grades.score",pymongo.ASCENDING) #升序,默认 |
10 | cursor=coll.find().sort("grades.score",pymongo.DESCENDING) #降序 |
更新数据
1 | result=coll.update_one({"address":"127.0.0.1"},{"$set":{"address":"10.10.10.10"}}) #更新一个document |
2 | result=coll.update_one({"address":"127.0.0.1"},{"$set":{"grade.low":100}}) #更新一个嵌入式数据 |
3 | result=coll.update_many({"address":"127.0.0.1"},{"$set":{"grade":90}}) #更新符合的全部documet |
4 | result=coll.replace_one({"address":"127.0.0.1"},{"name":"testdata"}) #更换一个document |
删除数据
1 | result=coll.delete_one({"address":"127.0.0.1"}) #删除一个符合的document |
2 | result=coll.delete_many({"address":"127.0.0.1"}) #删除全部符合的documnet |
3 | result=coll.delete_many({}) # 删除全部的document |
4 | testdb.testcoll.drop() # 删除整个collection |
数据汇聚
1 | cursor=coll.aggregate([{"$group":{"$_id":"$address","count":{"$sum":1}}}]) #以$address的内容进行文档分组,并使用$sum来累加document的数量 |
2 | cursor=coll.aggregate([{"$match":{"address":"127.0.0.1","grades.grade":60}},{"$group":{"$_id":"$address","count":{"$sum":1}}}]) #先过滤后分组 |
创建索引
1 | coll.create_index([("address",pymongo.ASCENDING)]) #创建单个索引 |
2 | coll.create_index([("address",pymongo.ASCENDING),("address.zipcode",pymongo.DESCENDING)]) #创建多个索引 |