python 操作 mongoDB
模块
pymongo
安装方法
sudo pip3 install pymongo
操作步骤
1. 创建数据库连接对象
conn = pymonge.MomgoClient("localhost",27017)
2. 生成操作的数据库对象
db = conn.stu
3. 生成集合对象
myset = db.class0
4. 通过 集合对象 调用结构完成数据操作
['_BaseObject__codec_options', '_BaseObject__read_concern', '_BaseObject__read_preference', '_BaseObject__write_concern', '_Collection__create', '_Collection__create_index', '_Collection__database', '_Collection__find_and_modify', '_Collection__full_name', '_Collection__name', '_Collection__write_response_codec_options', '__call__', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_command', '_count', '_delete', '_insert', '_insert_one', '_legacy_write', '_socket_for_primary_reads', '_socket_for_reads', '_socket_for_writes', '_update', 'aggregate', 'bulk_write', 'codec_options', 'count', 'create_index', 'create_indexes', 'database', 'delete_many', 'delete_one', 'distinct', 'drop', 'drop_index', 'drop_indexes', 'ensure_index', 'find', 'find_and_modify', 'find_one', 'find_one_and_delete', 'find_one_and_replace', 'find_one_and_update', 'full_name', 'group', 'index_information', 'initialize_ordered_bulk_op', 'initialize_unordered_bulk_op', 'inline_map_reduce', 'insert', 'insert_many', 'insert_one', 'list_indexes', 'map_reduce', 'name', 'next', 'options', 'parallel_scan', 'read_concern', 'read_preference', 'reindex', 'remove', 'rename', 'replace_one', 'save', 'update', 'update_many', 'update_one', 'with_options', 'write_concern']
5. 关闭数据库连接
db.close()
数据操作
插入文档
insert_many 插入多条insert_one 插入一条insert 插入一条或多条save 保存文档
实例
myset.insert_one({ "name":"张铁林","King":"乾隆"}) myset.insert_many([{ "name":"张国立","King":"康熙"}, { "name":"陈道明","King":"康熙"}]) myset.insert({ "name":"唐国强","King":"雍正"})myset.insert([{ "name":"陈建斌","King":"雍正"}, { "_id":1, "name":"吴奇隆","King":"四爷"}]) myset.save({ "_id":1,"name":"聂远","King":"乾隆"})
查找文档
find 查找所有find_one 查找首个
find
find(query,field)
参数形式 同 mongoshell 中的 find
返回值 游标对象
对比 mongoDB 的语句
所有的操作符加上引号,作为字符串形式
true/false/null 改成 True/False/None
实例
cursor = myset.find({ "name":{ "$exists":True}},{ "_id":0})for i in cursor: # print(i) print(i["name"],"--",i["King"])
cursor 对象属性函数
cursor 本质为返回的文档集合的序列, 同 mongoDB 一样可以继续调用其他的精确筛选方法
next() 获取下一个文档limit() 获取前几条文档skip() 跳过几条count() 计数sort() 排序 * sort 的参数发生了变化 sort([(域名,1/-1),(),()...])* limit,sort,skip 使用时, 必须保证游标在最开始的位置
实例
# for i in cursor.limit(3): # for i in cursor.skip(3): # for i in cursor.sort([("name",1),("age",-1)]): for i in cursor.sort([("name",1)]): print(i)
find_one
find_one(query,field)
功能 查找首个符合条件的文档
参数 同 find
返回值 返回字典(只查到首条, 因此返回数据也是单数据, 即 字典)
实例
dic = { "$or":[{ "King":"乾隆"},{ "name":"陈道明"}]}d = myset.find_one(dic,{ "_id":0})print(d)
修改操作
update_one 修改一个update_many 修改多个update 修改一个或多个
实例
myset.update_many({ "King":"康熙"},{ "$set":{ "king_name":"玄烨"}})myset.update_one({ "King":"雍正"},{ "$set":{ "king_name":"忘了名字"}})myset.update_one({ "name":"郑少秋"},{ "$set":{ "King":"乾隆"}},upsert=True)myset.update({ "King":"乾隆"},{ "$set":{ "king_name":"弘历"}})myset.update({ "King":"乾隆"},{ "$set":{ "king_name":"弘历"}},multi=True)
删除操作
delete_one 删除一个delete_many 删除多个remove 删除一个或多个
实例
myset.delete_one({ "King":"康熙"})myset.delete_many({ "King":"雍正"})myset.remove({ "king_name":{ "$exists":False}})myset.remove({ "king_name":None},multi=True)
复合操作
find_one_and_updatefind_one_and_delete
实例
data = myset.find_one_and_delete({ "name":"张铁林"})print(data)
文档操作整体实例
from pymongo import MongoClient# 创建数据库链接conn = MongoClient("localhost",27017)# 创建数据库对象db = conn.stu# db = conn["stu"]# 生成集合对象myset = db.class0# myset = db["class0"]# 创建集合对象myset = db.class4# 数据操作# -----------------------insert----------------------# myset.insert_one({"name":"张铁林","King":"乾隆"})# myset.insert_many([{"name":"张国立","King":"康熙"},\ # {"name":"陈道明","King":"康熙"}])# myset.insert({"name":"唐国强","King":"雍正"})# myset.insert([{"name":"陈建斌","King":"雍正"},\ # {"_id":1, "name":"吴奇隆","King":"四爷"}])# myset.save({"_id":1,"name":"聂远","King":"乾隆"})# ----------------------find-----------------------# cursor = myset.find({"name":{"$exists":True}},{"_id":0})# print(cursor.next()) # 打印下一个文档# for i in cursor: # print(i) # print(i["name"],"--",i["King"])# 所有的操作符加上引号,作为字符串形式# true/false/null 改成 True/False/None# for i in cursor.limit(3):# for i in cursor.skip(3):# for i in cursor.sort([("name",1),("age",-1)]):# for i in cursor.sort([("name",1)]): # print(i)# limit,sort,skip 使用时, 必须保证游标在最开始的位置# dic = {"$or":[{"King":"乾隆"},{"name":"陈道明"}]}# d = myset.find_one(dic,{"_id":0})# print(d)# ----------------------update-----------------------# myset.update_many({"King":"康熙"},{"$set":{"king_name":"玄烨"}})# myset.update_one({"King":"雍正"},{"$set":{"king_name":"忘了名字"}})# myset.update_one({"name":"郑少秋"},{"$set":{"King":"乾隆"}},upsert=True)# myset.update({"King":"乾隆"},{"$set":{"king_name":"弘历"}})# myset.update({"King":"乾隆"},{"$set":{"king_name":"弘历"}},multi=True)# ------------------------delete----------------------# myset.delete_one({"King":"康熙"})# myset.delete_many({"King":"雍正"})# myset.remove({"king_name":{"$exists":False}})# myset.remove({"king_name":None},multi=True)# ------------------------复合操作----------------------# data = myset.find_one_and_delete({"name":"张铁林"})# print(data)# 关闭链接conn.close()
索引操作
create_index 创建索引 参数: 二元元组构成列表 create_index([("age",1)]) create_index([("age",1),("name":-1)]) 也可以直接写 域名 ("age") 表示对该域创建正向索引 返回值: 索引名称list_indexes 查看索引drop_index 删除索引drop_indexes 删除所有索引
聚合操作
aggregate()
功能 完成聚合操作
参数 聚合管道, 同mongoshell 中的聚合
返回值 数据操作结果游标对象
实例
lis = [ { "$group": { "_id": "$sex", "num": { "$sum": 1}}},]cursor = myset.aggregate(lis)
索引聚合实例
from pymongo import MongoClientconn = MongoClient("localhost", 27017)db = conn.stumyset = db.class0# -------------------------------索引--------------------------------# 创建# index_name = myset.create_index("name")# index_age = myset.create_index("age",name="Age",sparse=True)# index_age = myset.create_index("age",name="Age",sparse=True,unique=True)# 删除索引# myset.drop_index("Age")# myset.drop_indexes()# 查看# for i in myset.list_indexes():# print(i)# ------------------------------聚合----------------------------------lis = [ { "$group": { "_id": "$sex", "num": { "$sum": 1}}},]cursor = myset.aggregate(lis)for i in cursor: print(i)conn.close()
文件操作
1. 导入bson 二进制模块,连接数据库
import bson.binary
2. 选择要存储的文件, 使用 rb 方式读取内容
3. 将读取的内容转换为 bson 格式
content = bson.binary.Binary(data)
功能 将 bytes 字串 转换为 bson 格式
参数 bytes 字串
返回值 转换后的数据
4. 将内容插入到数据库
实例
from pymongo import MongoClientimport bson.binaryconn = MongoClient("localhost",27017)db = conn.imagemyset = db.mm# --------------------存储----------------------------------# 读取图片内容# with open("123.PNG","rb") as f: # data = f.read()# 格式转化# conntent = bson.binary.Binary(data)# 插入数据库# myset.insert_one({"filename":"123.jpg","data":conntent})#--------------------取出文件-------------------------------# img = myset.find_one({"filename":"123.jpg"})# 写入本地# with open("123.jpg","wb") as f: # find_one 会自动转换不需要自己再转换了 # f.write(img["data"])conn.close()