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_update
find_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 MongoClient

conn = MongoClient("localhost", 27017)
db = conn.stu
myset = 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 MongoClient
import bson.binary conn = MongoClient("localhost",27017)
db = conn.image
myset = 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()

pymongo 操作的更多相关文章

  1. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  2. Python 使用pymongo操作mongodb库

    Python 使用pymongo操作mongodb库 2016-12-31 21:55 1115人阅读 评论(0) 收藏 举报  分类: - - - Python(10)  版权声明:本文为博主原创文 ...

  3. pymongo操作mongodb

    此验证中只开启两个mongodb节点,可以连接任意节点,以下操作不涉及读写,不涉及连接那个节点 mongodb连接: from pymongo import MongoReplicaSetClient ...

  4. python中使用pymongo操作mongo

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活.在这一节中,我们就来看 ...

  5. pymongo操作mongo数据库的查操作

    一:  数据结构 { "_id" : ObjectId("5de8a5b748a75a8d48b72bdc"), ", ", ", ...

  6. MongoDB学习【四】—pymongo操作mongodb数据库

    一.pymongodb的安装 Python 要连接 MongoDB 需要 MongoDB 驱动,这里我们使用 PyMongo 驱动来连接. pip安装 pip 是一个通用的 Python 包管理工具, ...

  7. python 通过pymongo操作mongoDB执行sort

    在mongo shell 中对数据进行排序操作的时候 db.getCollection('ANJUKE_PRICE').find({},{'id':1,'_id':0}).sort({'id':1}) ...

  8. MongoDB、PyMongo数据操作

    MongoDB 命令 C:\Program Files\MongoDB\Server\4.0\bin mongo 客户端 mongod 服务端 mongoexport 导出 普通格式,每条记录一行,整 ...

  9. python操作mongoDB(pymongo的使用)

    pymongo操作手册 连接数据库 方法一(推荐) import pymongo client = pymongo.MongoClient(host="localhost",por ...

随机推荐

  1. SAP MM 根据采购订单反查采购申请?

    SAP MM 根据采购订单反查采购申请? 前日微信上某同行发来一个message,说是想知道如何通过采购订单号查询到其前端的采购申请号. 笔者首先想到去检查采购订单相关的常用报表ME2L/ME2M/M ...

  2. java.lang.NoSuchFieldError异常

    原因就是主项目的xml文件和库项目中的xml文件 命名一样,导致库项目中的xml文件被主项目覆盖,所以库项目就找不到xml中的相关id,就报异常了.   解决方法:修改主项目中的xml文件命名,不要和 ...

  3. (简单)华为荣耀4A SCL-TL00的usb调试模式在哪里打开的方法

    就在我们使用PC通过数据线连接上安卓手机的时候,如果手机没有开启Usb调试模式,PC则没办法成功检测到我们的手机,有时候,我们使用的一些功能强大的App好比之前我们使用的一个App引号精灵,老版本就需 ...

  4. android中的websocket 应用

    websocket 在实际的应用中不仅仅能做聊天应用,还可以利用websocket长连接保持数据的实时更新以及信息的推送. websocket 的实现的关键点 第一个:首先需要引入 java-webs ...

  5. MongoDB 创建索引的语法

    1.为普通字段添加索引,并且为索引命名 db.集合名.createIndex( {"字段名": 1 },{"name":'idx_字段名'}) 说明: (1)索 ...

  6. LeetCode算法题-N-ary Tree Postorder Traversal(Java实现)

    这是悦乐书的第269次更新,第283篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第136题(顺位题号是590).给定一个n-ary树,返回其节点值的后序遍历.例如,给定 ...

  7. 前端面试必备的css盒子模型

    今天同学发给了我一份前端基础的面试题,第一道便是对css盒子模型的理解,我看到的第一眼想到的是div,然后就...懵逼了,知其然不知其所以然.所以打算写一写盒子模型的概念理解啥的,如有写的不当的地方, ...

  8. c++中 . 和 -> 的区别是什么?

    主要用于访问类的成员,->主要用于类类型的指针访问类的成员,而.运算符,主要用于类类型的对象访问类的成员. 例如: class A { public :int a } A ma; A *p=&a ...

  9. .NET CORE学习笔记系列(2)——依赖注入【2】基于IoC的设计模式

    原文:https://www.cnblogs.com/artech/p/net-core-di-02.html 正如我们在<控制反转>提到过的,很多人将IoC理解为一种“面向对象的设计模式 ...

  10. vue 在safari动态多级面包屑导航样式不刷新的bug

    前言: 最近做公司的管理系统,用到了elementUI 里面的 bread面包屑组件,本来一切好好的,谁知道mac的safari样式全部缓存了,硬是下面这种效果,真头疼 而chrome,QQ均显示正常 ...