数据库 - 一文看懂MongoDB

铁佛  金牌会员 | 2024-12-8 11:44:32 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 877|帖子 877|积分 2631



1. 媒介

MongoDB 是一种基于文档的 NoSQL 数据库管理体系,使用 JSON 样式的 BSON 格式存储数据,具有灵活的数据模型和良好的扩展性,实用于大数据、高并发和快速开辟的场景。

2. MongoDB结构

数据库(Database):MongoDB中的数据库是一个容器,包含了多个聚集。
聚集(Collection):类似关系数据库中的表,存储在数据库当中。文档存放在聚集中不需要类似的结构
文档(Document):MongoDB中的数据记录,使用BSON(二进制JSON)的形式存储,包含嵌套的键值对,数组等文档
字段(Field):文档的键值对
  1. {
  2.   "_id": ObjectId("507f1f77bcf86cd799439011"),
  3.   "name": "Alice",
  4.   "age": 25,
  5.   "address": {
  6.     "city": "New York",
  7.     "zip": "10001"
  8.   }
  9. }
复制代码

3. 安装

Windows用户可以直接进入官网进行安装
安装网址:Download MongoDB Community Server | MongoDB
Mac用户可以通过终端进行安装,以Mac用户为例,使用Homebrew
3.1 Homebrew

Homebrew 是 macOS 上的一个包管理器,旨在资助用户简便地安装、更新和管理软件包(软件和工具)。Homebrew 类似于 Linux 体系上的 apt 或 yum,可以主动解决软件的依赖关系并简化安装流程。
  1. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
复制代码

在Homebrew中提供了以下下令方便后续安装包
安装软件包
  1. brew install <package_name>
复制代码
更新Homebrew及其软件库
  1. brew update
复制代码
升级已经安装的软件
  1. brew upgrade
复制代码
列出已安装的软件
  1. brew lost
复制代码
卸载软件包
  1. brew uninstall <package_name>
复制代码

3.2 安装

在终端中输入以下指令,从Homebrew中下载MongoDB
  1. brew tap mongodb/brew
  2. brew install mongodb-community
复制代码

4. 启动

在终端中
  1. brew services start mongodb/brew/mongodb-community
复制代码
如果下载了MongDB Shell
可以在终端中输入以下下令进入MongoDB Shell
  1. mongo
复制代码

5. 基于python的MongoDB的使用

5.1 毗连MongoDB

  1. from pymongo import MongoClient
  2. client = MongoClient("mongodb://localhost:27017/") #本地与MongoDB进行连接配置
  3. # 连接到数据库(如果数据库不存在,将在插入数据时自动创建)
  4. db = client["my_database"] #创建数据库
复制代码
在python中使用mongoDB需要使用当地与其毗连,可以想象为使用python打开了mongoDB这个步伐,下一步就是在步伐中打开或者创建我们的数据库
语法类似于pandas中DataFrame创建新的列

5.2 创建&插入

  1. collection = db['collection']
复制代码
在数据库中创建新的聚集,类比SQLite创建一张表格用于存储信息 
- 插入一条文档

  1. document = {'name':'Alice','age':18,'sex':'Female'}
  2. collection.insert_one(document)
复制代码
在所对应的聚集中插入一条文档,文档的格式必须以字典的形式进行,由于MongDB数据库存储noSQL类型的数据
- 插入多个文档

  1. documents = [{'name':'Louis','age':22,'sex':'Male'},{'name':'Ricardo','age':21,'sex':'Male'}]
  2. collection.insert_many(documents)
复制代码
面临有多个文档,使用insert_many函数

5.3 查询数据

 5.3.1 根本查询

 • 查询一条文档
  1. result = collection.find_one({"name": "Alice"})
  2. print(result)
复制代码
• 查询多个文档
  1. results = collection.find()
  2. for result in results:
  3.     print(result)
复制代码
针对多项数据,MongoDB不会直接返回数据内容,而是返回一个游标对象
游标对象(Cursor)是一种用于逐行遍历和操作数据记录的对象,通常在处理数据库或大数据集时使用。游标对象可以让我们在不一次性加载所有数据到内存的情况下,逐步获取数据,避免因数据量过大导致的内存溢出问题。
通过遍历与循环我们可以将游标对象内部的数据获取

5.3.2 条件查询

  1. collection.find_one({'name':'Alice'})
复制代码
条件判断的形式是在函数内部传入一个{'key':value},以字典的形式进行转达
  1. collection.find_one({'age':{'$lte':20}})
复制代码
还可以使用比较运算符进行一些较为复杂的比较,形式为仍然以字典的形式进行转达,{'key':{'条件判断':用于判断的值}}
以下是MongoDB支持的比较运算符语法
$gt大于
$lt小于
$gte大于等于
$lte小于等于
$ne不等于

5.3.3 逻辑运算符

使用逻辑运算符进行更为严酷且细致的筛选数据
  1. collection.find_one({'$and':
  2.                      [{'age':{'$gte':18}},
  3.                       {'name':'Ricardo'}]
  4.                     })
复制代码
传入形式仍然是{}字典形式,内容格式{'逻辑运算符':[{},{}]},通过数组[]表达式进行不同条件的毗连,在其内部的判断条件语法与正常的比较运算一致
$and与/且
$or
$not
$nor都不满足

5.4 更新文档

  1. collection.update_one({'name':'Alice'},{'$set':{'age':20}})
复制代码
在MongoDB中语法段的分割险些都是使用{}
更新文档数据内容使用update_one函数,此中第一项传入条件判断,找到需要被更新的文档;第二项传入更新文档的内容,上述的例子将age的值修改为20 

5.5 删除文档

  1. db.my_collection.delete_one({ name: "Alice" })
复制代码
  1. db.my_collection.delete_many({ age: { $lt: 30 } })
复制代码
传入一个条件判断,删除对应的文档
deleteOne函数删除单条文档;deleteMany函数删除多条文档

5.6 索引与性能优化

创建索引,根据索引进行查找可以加速查询,但会占用内存空间;以空间换时间
创建索引
  1. db.my_collection.createIndex({ age: 1 })  // 1表示升序,-1表示降序
复制代码
查看所有索引 
  1. db.my_collection.getIndexes()
复制代码
删除索引 
  1. db.my_collection.dropIndex("age_1")
复制代码

5.7 关闭毗连

5.7.1 手动关闭

  1. client.close()
复制代码

5.7.2 主动关闭

使用 with 语句(上下文管理器)来主动管理毗连,离开 with 代码块后会主动关闭毗连:
  1. from pymongo import MongoClient
  2. with MongoClient("mongodb://localhost:27017/") as client:
  3.     db = client["my_database"]
  4.     collection = db["my_collection"]
  5.    
  6.     # 执行查询或其他操作
  7.     for document in collection.find():
  8.         print(document)
  9. # 离开 'with' 块后,连接会自动关闭
复制代码

之后在终端中退出MongoDB
  1. exit
复制代码

6. MongoDB shell与Python中语句的区别

MongoDB Shell使用的是JavaScript风格的下令行语法,而PyMongo则是Python语言的语法
MongoDB Shell中的函数首个单词一般是小写紧接着的单词首字母大写,pymongo则使用下划线"_"进行分割
例如delete_one函数,在MongoDB Shell中语法为deleteOne

7. MongoDB的优点与缺点

7.1 优点

- 灵活的数据模型:MongoDB使用文档存储(BSON格式),答应存储复杂的数据结构。这种灵活性使得数据库能够适应变化的需求,不需要事先定义模式。

- 高性能:MongoDB在读写操作上表现出色,特殊是在处理大规模数据时。通过内存映射文件和高效的索引机制,它能够快速检索数据。

- 横向扩展能力:MongoDB支持水平扩展,可以通太过片(sharding)将数据分布在多个服务器上,以处理不断增长的存储需求和负载。

7.2 缺点

- 数据冗杂:为了实现高性能,MongoDB常常采用数据冗余的方式(例如,嵌套文档)。这大概导致数据的一致性问题,需要在应用层进行额外的管理。

- 缺乏复杂的查询能力:虽然MongoDB支持多种查询,但某些复杂的查询(如毗连查询)大概不如关系数据库容易实现,或者需要更多的开辟工作。

- 内存使用高:MongoDB依赖于内存映射来进步性能,大概需要更多的内存资源来有效运行。大规模的数据集大概导致高内存消耗。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

铁佛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表