文章目录

  • 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. 关系型数据库到文档型数据库的跨越

    1. 简介 在文档型NoSQL数据库出现之前,许多开发者一直绞尽脑汁思考,希望能想出更好的处理关系型数据库技术的方法,如今他们可能要跳出那种思维而另辟蹊径.本文将介绍关系型数据库和分布式文档型数据库的 ...

  2. 悉数11种主流NoSQL文档型数据库

    悉数11种主流NoSQL文档型数据库 文档型数据库是NoSQL中非常重要的一个分支,它主要用来存储.索引并管理面向文档的数据或者类似的半结构化数据.顾名思义,文档型数据库(面向文档数据库)的关键核心概 ...

  3. 文档型数据库设计模式-如何存储树形数据

    在数据库中存储树形结构的数据,这是一个非常普遍的需求,典型的比如论坛系统的版块关系.在传统的关系型数据库中,就已经产生了各种解决方案. 此文以存储树形结构数据为需求,分别描述了利用关系型数据库和文档型 ...

  4. mongodb单表最大记录数_SpringBoot+Cloud全家桶微服务实战项目之文档型数据库MongoDB四...

    ​一.MongoDB简介以及使用场景 MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种.它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富, ...

  5. spring cloud alibaba微服务原理与实战_SpringBoot+Cloud全家桶微服务实战项目之文档型数据库MongoDB四...

    ​一.MongoDB简介以及使用场景 MongoDB 是一个跨平台的,面向文档的数据库,是当前 NoSQL 数据库产品中最热门的一种.它介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富, ...

  6. 文档型数据库列一般都是弱项

    文档型数据库一般都是以行为基础得,添加更新删除等操作,因为文档型数据的一般存储结构都是键值对.所以对列的概念很弱,比如有一些文档数据库,是无法对单列操作的,有时候想修改一列的值,只能所有数据全部重新添 ...

  7. 文档型数据库mongodb介绍2-副本集

    一. 副本集介绍 之前的文章介绍了 mongodb主从 mongodb提供了另外一种 基于副本集的集群 该方式 是一主一从的升级版  一主多从, 仍然是主节点负责写入 从节点定时同步主节点数据 使用该 ...

  8. mysql主备数据库配置文档_MySQL数据库配置主从服务器实现双机热备实例教程

    网站:bbs.osyunwei.com 程序在:Web服务器192.168.21.129上面 数据库在:MySQL服务器192.168.21.169上面 实现目的:增加一台MySQL备份服务器(192 ...

  9. MongoDB小型文档型数据库使用

    MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中 ...

最新文章

  1. 2003 DHCP升级到2008 DHCP
  2. 针孔相机模型之再学习
  3. Java 11 快要来了,编译 运行一个命令搞定!
  4. canvas绘制正文形并填充-2
  5. Galgame研发日志:预算爆炸,问题不大
  6. “CEPH浅析”系列之七——关于CEPH的若干想法
  7. java中实现客户姓名添加和显示
  8. ssh(Spring+Spring mvc+hibernate)——EmpDaoImpl.java
  9. leetcode 406. 根据身高重建队列(贪心算法)
  10. ubuntu15.04在安装完vmware11后打开提示 VMware Kernel Module Updater
  11. 原来程序员的大部分时间并不是写代码
  12. 【译】你不知道的Chrome调试工具技巧 第七天:异步console的趣味小窍门
  13. 教你如何做到显示 Dialog Box(对话框)
  14. canpro脚本_canpro协议分析平台
  15. 机器学习:k-means聚类效果评估
  16. 2021年茶艺师(中级)考试内容及茶艺师(中级)考试总结
  17. Elasticsearch 之(6)kibana嵌套聚合,下钻分析,聚合分析
  18. 无线局域网技术分析及攻击实战
  19. Linux基本命令(Redhat,CentOS)
  20. 如何恢复计算机系统,电脑系统还原,手把手教你电脑系统怎么还原

热门文章

  1. 用米思齐+点灯科技——ESP32点灯实验
  2. Mybatis-plus尚硅谷跟学课堂笔记
  3. Schol-AR增强现实技术让图像跃然纸上
  4. php 数字货币格式化,NPM酷库:accounting,格式化数字和货币
  5. java物业管理系统设计_JAVA版物业管理系统论文+设计源码
  6. java -Xms -Xmx -XX:PermSize -XX:MaxPermSize 作用详解
  7. Python:SMOTE算法
  8. C语言实验题目及其解答
  9. SONY VISCA协议及其简单认识
  10. C#实现二进制转10进制