非关系型数据库 之 文档型数据库 MongoDB 的使用(Python3)
文章目录
- 1、MongoDB 简介
- 1.1、简述
- 1.2、应用场景
- 1.3、优点
- 1.4、缺点
- 2、CentOS 操作 MongoDB
- 2.1、安装启动
- 2.1.1、下载安装
- 2.1.2、后台启动
- 2.1.3、查看是否启动
- 2.1.4、如果开了外网端口,用浏览器查看是否外网访问
- 2.2、常用命令
- 2.2.1、连接mongo
- 2.2.2、显示数据库列表
- 2.2.3、显示表单(集合)列表
- 2.2.4、查询集合所有数据
- 3、Python3 操作 MongoDB
- 3.1、安装PyMongo
- 3.2、注意事项
- 3.3、方法列表
- 3.3.1、数据库列表
- 3.3.2、连接测试
- 3.3.3、没有此库就创建这个数据库,有此库就连接这个数据库
- 3.3.4、表单(集合)列表
- 3.3.5、没有此表单就创建这个表单,有此表单就连接这个表单
- 3.3.6、增加数据
- 3.3.6.1、增加一条数据
- 3.3.6.2、增加多条数据
- 3.3.7、删除数据
- 3.3.7.1、删除一条数据
- 3.3.7.2、删除多条数据
- 3.3.7.3、删除一个表单
- 3.3.8、更新数据
- 3.3.8.1、修改匹配到的第一条数据
- 3.3.8.2、修改匹配到的多条数据
- 3.3.9、查询数据
- 3.3.9.1、查询一条数据
- 3.3.9.2、查询集合中所有数据
- 3.3.9.3、根据 指定条件查询 或者 正则表达式查询
- 3.3.10、排序数据
- 3.4、完整源码
- 4、源码分享Github
1、MongoDB 简介
1.1、简述
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
1.2、应用场景
- 大而复杂的数据
- 移动和社会基础设施数据
- 内容管理和交付
- 用户数据
- 管理数据中心
1.3、优点
- MongoDB 的架构较少。它是一个文档数据库,它的一个集合持有不同的文档。
- 从一个到另一个的文档的数量,内容和大小可能有差异。
- MongoDB 中单个对象的结构很清淅。
- MongoDB 中没有复杂的连接。
- MongoDB 提供深度查询的功能,因为它支持对文档的强大的动态查询。
- MongoDB 很容易扩展。
- 它使用内部存储器来存储工作集,这是其快速访问的原因。
1.4、缺点
- 不支持事务操作
- 占用空间过大
- MongoDB没有如MySQL那样成熟的维护工具
- 无法进行关联表查询,不适用于关系多的数据
- 复杂聚合操作通过mapreduce创建,速度慢
- 模式自由, 自由灵活的文件存储格式带来的数据错误
2、CentOS 操作 MongoDB
2.1、安装启动
2.1.1、下载安装
下载 3.0.6 版本
curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.6.tgz
安装
tar -zxvf mongodb-linux-x86_64-3.0.6.tgz
移动文件夹
mv mongodb-linux-x86_64-3.0.6/ /usr/local/mongodb
增加环境变量
export PATH=/usr/local/mongodb/bin:$PATH
2.1.2、后台启动
nohup /usr/local/mongodb/bin/mongod --dbpath=/data/db --rest > /usr/local/mongodb/mongo.log 2>&1 &
2.1.3、查看是否启动
netstat -tnlp|grep mongo
端口
27017是默认开的mongodb端口,28017是默认的web访问端口
效果
2.1.4、如果开了外网端口,用浏览器查看是否外网访问
2.2、常用命令
2.2.1、连接mongo
/usr/local/mongodb/bin/mongo
效果
2.2.2、显示数据库列表
show dbs
效果
2.2.3、显示表单(集合)列表
# 切换分支
use mongodb_test
# 显示列表
show tables
# 显示列表
show collections
show tables 和 show collections 效果相同
效果
2.2.4、查询集合所有数据
db.col_test.find()
效果
3、Python3 操作 MongoDB
3.1、安装PyMongo
pip install pymongo
3.2、注意事项
注意,如果创建的数据库、表单中没有数据,是显示不出来数据库的。
3.3、方法列表
3.3.1、数据库列表
from pymongo import MongoClientclient_ip = "193.112.61.11"
client_port = 27017my_client = MongoClient(client_ip, client_port)
db_list = my_client.list_database_names()
print("数据库列表:",db_list)
3.3.2、连接测试
db = my_client.test
print("db:", db)
testDB(my_client)
3.3.3、没有此库就创建这个数据库,有此库就连接这个数据库
db_name = 'mongodb_test'
my_db = my_client[db_name]
3.3.4、表单(集合)列表
col_list = my_db.list_collection_names()
3.3.5、没有此表单就创建这个表单,有此表单就连接这个表单
sheet_tab_one = my_db[name]
3.3.6、增加数据
3.3.6.1、增加一条数据
# 增加一条数据 返回_id
def addData_one(my_col, my_json):result = my_col.insert_one(my_json)print(result.inserted_id,"增加一条数据")# 返回 _id 字段return result.inserted_id
3.3.6.2、增加多条数据
# 增加多条数据 返回所有文档对应的 _id 值
def addData_many(my_col, my_jsons):result = my_col.insert_many(my_jsons)print(result.inserted_ids)return result.inserted_ids
3.3.7、删除数据
3.3.7.1、删除一条数据
# 删除一条数据
def delData_one(my_col, myquery):result = my_col.delete_one(myquery)print(result.deleted_count,"数据已删除")
3.3.7.2、删除多条数据
# 删除多条数据
def delData_many(my_col, myquery):result = my_col.delete_many(myquery)print(result.deleted_count,"数据已删除")
3.3.7.3、删除一个表单
# 删除一个表单
def delCol(my_col):my_col.drop()print("删除表单成功")
3.3.8、更新数据
3.3.8.1、修改匹配到的第一条数据
# 修改匹配到的第一条数据
def updateData_one(my_col, myquery, new_val):result = my_col.update_one(myquery, new_val)print(result.modified_count, "文档已修改")
3.3.8.2、修改匹配到的多条数据
# 修改匹配到的多条数据
def updateData_many(my_col, myquery, new_val):result = my_col.update_many(myquery, new_val)print(result.modified_count, "文档已修改")
3.3.9、查询数据
3.3.9.1、查询一条数据
# 查询一条数据
def searchData_one(my_col):result = my_col.find_one()print(result)
3.3.9.2、查询集合中所有数据
# 查询集合中所有数据
def searchData_many(my_col, limit = 0):for item in my_col.find().limit(limit):print(item)
3.3.9.3、根据 指定条件查询 或者 正则表达式查询
# my_query = {"name": "ShaShiDi"} # 根据指定条件查询
# my_query = {"name": {"$regex": "^S"}} # 以下实例用于读取 name 字段中第一个字母为 "S" 的数据
# 根据指定条件查询 或者正则表达式查询(比如 my_query = { "name": { "$regex": "^S" } })
def searchData_miss(my_col, my_query):print("根据指定条件查询: ", my_query)my_doc = my_col.find(my_query)for item in my_doc:print(item)
3.3.10、排序数据
# 按照某字段排序 默认True是正序,False是倒序
def sortData(my_col, my_key, sortB = True):if sortB:my_doc = my_col.find().sort(my_key)else:my_doc = my_col.find().sort(my_key, -1)for item in my_doc:print(item)
3.4、完整源码
from pymongo import MongoClient# 数据库列表
def ifnotDB(my_client, db_name):db_list = my_client.list_database_names()print("数据库列表:",db_list)if db_name in db_list:print("%s 数据库已存在!"%db_name)else:print("%s 数据库不存在!"%db_name)# 测试数据库是否连接成功 返回测试结果
def testDB(my_client):db = my_client.testprint("db:", db)return db# 创建一个数据库 返回数据库对象
def creatDB(my_client, name):my_db = my_client[name]ifnotDB(my_client, name)return my_db# 表单列表
def ifnotCol(my_db, col_name):col_list = my_db.list_collection_names()if col_name in col_list:print("%s 集合已存在!"%col_name)else:print("%s 集合不存在!"%col_name)# 创建一个表单 返回表单对象
def creatCol(my_db, name):sheet_tab_one = my_db[name]ifnotCol(my_db, name)return sheet_tab_one# 增加一条数据 返回_id
def addData_one(my_col, my_json):result = my_col.insert_one(my_json)print(result.inserted_id,"增加一条数据")# 返回 _id 字段return result.inserted_id# 增加多条数据 返回所有文档对应的 _id 值
def addData_many(my_col, my_jsons):result = my_col.insert_many(my_jsons)print(result.inserted_ids)return result.inserted_ids# 删除一条数据
def delData_one(my_col, myquery):result = my_col.delete_one(myquery)print(result.deleted_count,"数据已删除")# 删除多条数据
def delData_many(my_col, myquery):result = my_col.delete_many(myquery)print(result.deleted_count,"数据已删除")# 删除一个表单
def delCol(my_col):my_col.drop()print("删除表单成功")# 修改匹配到的第一条数据
def updateData_one(my_col, myquery, new_val):result = my_col.update_one(myquery, new_val)print(result.modified_count, "文档已修改")# 修改匹配到的多条数据
def updateData_many(my_col, myquery, new_val):result = my_col.update_many(myquery, new_val)print(result.modified_count, "文档已修改")# 按照某字段排序 默认True是正序,False是倒序
def sortData(my_col, my_key, sortB = True):if sortB:my_doc = my_col.find().sort(my_key)else:my_doc = my_col.find().sort(my_key, -1)for item in my_doc:print(item)# 查询一条数据
def searchData_one(my_col):result = my_col.find_one()print(result)# 查询集合中所有数据
def searchData_many(my_col, limit = 0):for item in my_col.find().limit(limit):print(item)# 根据指定条件查询 或者正则表达式查询(比如 my_query = { "name": { "$regex": "^S" } })
def searchData_miss(my_col, my_query):print("根据指定条件查询: ", my_query)my_doc = my_col.find(my_query)for item in my_doc:print(item)if __name__ == "__main__":client_ip = "服务器IP地址"client_port = 27017db_name = 'mongodb_test'col_name = 'col_test'my_json = {"name": "ShaShiDi", "url": "https://shazhenyu.blog.csdn.net/"}# 可以指定_id 我们也可以自己指定 id,插入my_jsons = [{"_id": 1,"name": "sha", "url": "https://www.shazhenyu.com"},{"_id": 2,"name": "sha2", "url": "https://shazhenyu.com"}]my_query = {"name": "ShaShiDi"}my_query_regex = {"name": {"$regex": "^S"}} # 以下实例用于读取 name 字段中第一个字母为 "S" 的数据my_key = "_id"new_values = {"$set": {"name": "ShaShiDi_new"}}my_client = MongoClient(client_ip, client_port)testDB(my_client)my_db = creatDB(my_client,db_name)my_col = creatCol(my_db,col_name)# # 增加一条数据# addData_one(my_col, my_json)# # 增加多条数据# addData_many(my_col, my_jsons)# # 删除一个符合条件的集合# delData_one(my_col, my_query)# # 删除所有符合条件的集合# delData_many(my_col, my_query)# # 删除该集合中的所有文档# delData_many(my_col, {})# # 删除表单# delCol(my_col)# # 修改第一个匹配到的文档# updateData_one(my_col, my_query, new_values)# # 修改所有符合条件的文档# updateData_many(my_col, my_query, new_values)# # 按照某字段排序 默认True是正序,False是倒序# sortData(my_col, my_key)# # 根据指定条件查询# searchData_miss(my_col, my_query)# # 根据正则表达式查询# searchData_miss(my_col, my_query_regex)# # 查询集合中所有数据 如果写第二个参数,就是指定条数记录查询# # searchData_many(my_col)# searchData_many(my_col,2)
4、源码分享Github
https://github.com/ShaShiDiZhuanLan/Demo_SQL_Python
非关系型数据库 之 文档型数据库 MongoDB 的使用(Python3)相关推荐
- 关系型数据库到文档型数据库的跨越
1. 简介 在文档型NoSQL数据库出现之前,许多开发者一直绞尽脑汁思考,希望能想出更好的处理关系型数据库技术的方法,如今他们可能要跳出那种思维而另辟蹊径.本文将介绍关系型数据库和分布式文档型数据库的 ...
- 悉数11种主流NoSQL文档型数据库
悉数11种主流NoSQL文档型数据库 文档型数据库是NoSQL中非常重要的一个分支,它主要用来存储.索引并管理面向文档的数据或者类似的半结构化数据.顾名思义,文档型数据库(面向文档数据库)的关键核心概 ...
- 文档型数据库设计模式-如何存储树形数据
在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系.在传统的关系型数据库中,就已经产生了各种解决方案. 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档型 ...
- mongodb单表最大记录数_SpringBoot+Cloud全家桶微服务实战项目之文档型数据库MongoDB四...
一.MongoDB简介以及使用场景 MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种.它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富, ...
- spring cloud alibaba微服务原理与实战_SpringBoot+Cloud全家桶微服务实战项目之文档型数据库MongoDB四...
一.MongoDB简介以及使用场景 MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种.它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富, ...
- 文档型数据库列一般都是弱项
文档型数据库一般都是以行为基础得,添加更新删除等操作,因为文档型数据的一般存储结构都是键值对.所以对列的概念很弱,比如有一些文档数据库,是无法对单列操作的,有时候想修改一列的值,只能所有数据全部重新添 ...
- 文档型数据库mongodb介绍2-副本集
一. 副本集介绍 之前的文章介绍了 mongodb主从 mongodb提供了另外一种 基于副本集的集群 该方式 是一主一从的升级版 一主多从, 仍然是主节点负责写入 从节点定时同步主节点数据 使用该 ...
- mysql主备数据库配置文档_MySQL数据库配置主从服务器实现双机热备实例教程
网站:bbs.osyunwei.com 程序在:Web服务器192.168.21.129上面 数据库在:MySQL服务器192.168.21.169上面 实现目的:增加一台MySQL备份服务器(192 ...
- MongoDB小型文档型数据库使用
MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中 ...
最新文章
- 2003 DHCP升级到2008 DHCP
- 针孔相机模型之再学习
- Java 11 快要来了,编译 运行一个命令搞定!
- canvas绘制正文形并填充-2
- Galgame研发日志:预算爆炸,问题不大
- “CEPH浅析”系列之七——关于CEPH的若干想法
- java中实现客户姓名添加和显示
- ssh(Spring+Spring mvc+hibernate)——EmpDaoImpl.java
- leetcode 406. 根据身高重建队列(贪心算法)
- ubuntu15.04在安装完vmware11后打开提示 VMware Kernel Module Updater
- 原来程序员的大部分时间并不是写代码
- 【译】你不知道的Chrome调试工具技巧 第七天:异步console的趣味小窍门
- 教你如何做到显示 Dialog Box(对话框)
- canpro脚本_canpro协议分析平台
- 机器学习:k-means聚类效果评估
- 2021年茶艺师(中级)考试内容及茶艺师(中级)考试总结
- Elasticsearch 之(6)kibana嵌套聚合,下钻分析,聚合分析
- 无线局域网技术分析及攻击实战
- Linux基本命令(Redhat,CentOS)
- 如何恢复计算机系统,电脑系统还原,手把手教你电脑系统怎么还原