MongoDB简介
MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
在高负载的情况下,添加更多的节点,可以保证服务器性能。
MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB应用场景
大而复杂的数据 移动和社会基础设施数据 内容管理和交付 用户数据 管理数据中心MongoDB优点
MongoDB 的架构较少。它是一个文档数据库,它的一个集合持有不同的文档。 从一个到另一个的文档的数量,内容和大小可能有差异。 MongoDB 中单个对象的结构很清淅。 MongoDB 中没有复杂的连接。 MongoDB 提供深度查询的功能,因为它支持对文档的强大的动态查询。 MongoDB 很容易扩展。 它使用内部存储器来存储工作集,这是其快速访问的原因。MongoDB缺点
不支持事务操作 占用空间过大 MongoDB没有如MySQL那样成熟的维护工具 无法进行关联表查询,不适用于关系多的数据 复杂聚合操作通过mapreduce创建,速度慢 模式自由, 自由灵活的文件存储格式带来的数据错误CentOSP安装MongoDB
下载安装MongoDB
下载 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
启动MongoDB
nohup /usr/local/mongodb/bin/mongod --dbpath=/data/db --rest > /usr/local/mongodb/mongo.log 2>&1 &
查看是否启动
netstat -tnlp|grep mongo
端口
27017是默认开的mongodb端口,28017是默认的web访问端口
效果
如果开了外网端口,用浏览器查看是否外网访问
MongoDB常用命令
连接mongoDB
/usr/local/mongodb/bin/mongo
效果
显示数据库列表
show dbs
效果
显示表单(集合)列表
# 切换分支 use mongodb_test # 显示列表 show tables # 显示列表 show collections
show tables 和 show collections 效果相同
效果
查询集合所有数据
db.col_test.find()
效果
Python3连接操作MongoDB
安装PyMongo
pip install pymongo
注意事项
注意,如果创建的数据库、表单中没有数据,是显示不出来数据库的。
显示数据库列表
from pymongo import MongoClient client_ip = "193.112.61.11" client_port = 27017 my_client = MongoClient(client_ip, client_port) db_list = my_client.list_database_names() print("数据库列表:",db_list)
连接测试
db = my_client.test print("db:", db) testDB(my_client)
db_name = 'mongodb_test' my_db = my_client[db_name]
表单(集合)列表
col_list = my_db.list_collection_names()
没有此表单就创建这个表单,有此表单就连接这个表单
sheet_tab_one = my_db[name]
Python3增删改查MongoDB数据
增加一条数据
# 删除一条数据 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 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, "文档已修改")
查询数据
# 查询一条数据 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": "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)
排序数据
# 按照某字段排序 默认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)
Python3操作MongoDB完整源码
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.test print("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 = 27017 db_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)
本文主要讲解了MongoDB安装及Python3操作MongoDB数据库详细方法与实例,更多关于Python3操作MongoDB数据库的技巧请查看下面的相关链接