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
显示数据库列表
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数据库的技巧请查看下面的相关链接
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 《怪物猎人:荒野》新怪物“赫猿兽”PV公布:残暴巨兽登场!
- 童丽2024 《千愁记旧情》8月最新 限量1:1母盘直刻[WAV+CUE][1.1G]
- 陈奕迅《认了吧》[新加坡纸盒版] [WAV+CUE][1.1G]
- 群星《小夫妻 电视原声带》[320K/MP3][113.44MB]
- 孙楠.2004-燃烧【华纳】【WAV+CUE】
- 群星.2003-英皇精挑细选VOL.1【英皇娱乐】【WAV+CUE】
- 林姗.2024-寄天的记忆【豪记】【FLAC分轨】
- 陈洁丽-《可改变HQ2》2024[WAV+CUE]
- 福田进一2024《魔鬼随想曲》WAV
- 群星《新歌龙卷风》2CD/DTS-ES[WAV]
- 群星《湮灭之潮 《明日之后》蓝潮资料片游戏原声带》[320K/MP3][50.49MB]
- 群星《湮灭之潮 《明日之后》蓝潮资料片游戏原声带》[FLAC/分轨][232.82MB]
- 威神V(WayV)《The Highest》[320K/MP3][45MB]
- lol全球总决赛lck二号种子是谁 S14全球总决赛lck二号种子队伍介绍
- 魔兽世界万圣节糖果任务怎么做 耶斯帕尔的万圣节糖果任务攻略