MongoDB简介及安装
MongoDB简介及安装

MongoDB简介及安装

MongoDB数据库的优点

MongoDB简介

MongoDB是一个基于分布式文件存储的数据库,由C++语言编写。旨在 为 WEB 应用提供可扩展高性能数据存储解决方案。将数据存储为一个文档(类似JSON对象),数据结构由键值(key=>value)对组成支持丰富的查询表达,可以设置任何属性的索引,也可以嵌套文档来表示层次关系,并存储诸如数组之类的结构。

mongodb数据库的优点 简述mongodb数据库的优势_mongodb

MongoDB是一个介于非系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB优势

MongoDB: MongoDB 最好的事情之一是对模式设计没有限制。您可以只在集合中放置几个文档,并且不需要与这些文档有任何关系。

但是,由于缺乏连接和事务,您需要根据应用程序访问数据的方式经常优化架构。

MySQL:在 MySQL 中存储任何内容之前,您需要明确定义表和列,并且表中的每一行都应该具有相同的列。正因为如此,如果遵循规范化,存储数据的方式就没有太多的灵活性空间。

  • 当您需要模式的灵活性时,MongoDB 是最好的选择。您可以轻松地将副本集与 MongoDB 结合使用,并利用可扩展性。扩展计划非常灵活,可以通过向系统添加更多机器和 RAM 来轻松实现。它还包括文档验证和集成系统。
  • MongoDB 的缺点包括一段时间内数据量较大。由于缺乏原子事务,与NoSQL相比速度相对较低。此外,该解决方案还处于初级阶段,因此无法直接替换遗留系统。
  • MySQL 已经存在很长时间了。主要优点之一是它是社区驱动的。作为一个成熟的解决方案,它支持 JOIN、具有权限和密码安全系统的原子事务。
  • 使用 MySQL,您可能无需投入大量时间和精力,而其他平台可能会自动为您完成这些工作,例如增量备份。MySQL 的主要问题是可扩展性。没有内置的 XML 和 OLAP。

(1)文档结构的存储方式,能够更便捷的获取数据,单个对象的结构是明确的。

(2)性能优越。在使用场合下,千万级别的文档对象,近10G的数据,对有索引的ID的查询不会比mysql慢,而对非索引字段的查询,则是全面胜出。

(3)深度查询能力。MongoDB使用与SQL一样强大的基于文档的查询语言支持对文档的动态查询。

(4)第三方支持丰富。开源的文档数据库MongoDB背后有商业公司为它提供商业培训和支持。

(5)全索引支持,扩展到内部对象和内嵌数组,没有复杂的连接。

小贴士:虽然MongoDB优势不少,但是在使用时也有注意一些缺点,比如不支持事务操作、占用空间过大,没有如MySQL那样成熟的维护工具。

MongoDB概念解析

在MongoDB中有3个比较核心概念,那就是文档、集合、数据库,下面通过一个表格与SQL术语进行对比,帮助你对它有更深理解:

SQL概念 MongoDB概念 解释说明
database database 数据库
table collection 数据库表 / 集合
row document 数据记录行 / 文档
column field 数据字段 / 域
index index 索引
table joins 表连接 ,MongoDB 不支持
primary key primary key 主键 ,MongoDB 自动将 _id 字段设置为主键

MongoDB安装

1、先获取mongodb镜像

docker pull mongo:4.2

2、镜像拉取完成后,运行mongodb容器

docker run \
-d \
--name mongo \
--restart=always \
--privileged=true \
-p 27017:27017 \
-v /home/mongodb/data:/data/db \
mongo:4.2 --auth

图片

3、mongodb服务配置

如上图,mongodb起来之后,进入容器,配置账户,具体执行命令如下:

#进入容器
docker exec -it mongo /bin/bash
#登录mobodb
mongo admin 
#创建一个名为 root,密码为 123456 的用户。
db.createUser({ user:'root',pwd:'123456',roles:[{ role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});

4、容器内部测试是否可用

登录mongodb数据库,创建集合users,验证数据库是否可以正常使用,命令如下:

#尝试使用上面创建的用户信息进行连接。
db.auth('root', '123456')
#选择admin库
use admin
#创建集合users
db.createCollection('users')
#插入数据
db.users.insert({"name":"小李","age": NumberInt(33)})
#查看数据
db.users.find()

5、本地navicat客户端连接Mongodb

首先要保证服务器开启27017端口,然后用公网IP加27017测试是否能访问(服务器要开放27017端口),当然如果是本地虚拟机搭建用虚拟机的IP+27017端口测试就行。

图片

然后用navicat新建mongodb连接测试没有正常访问。

图片

连接成功后,打开数据库可能什么都看不到,需要选择navicat菜单栏查看按钮把显示隐藏项目勾选上就可以了。

图片

6、后续运维命令

#停止、重启、删除容器命令
docker stop mongo #停止
docker start mongo # 启动
docker rm mongo #删除容器

Python操作MongoDB

Python操作MongoDB主要依赖于pymongo库,这是一个官方的MongoDB驱动程序,用于与MongoDB数据库进行交互。以下是一些基本的步骤和示例,展示如何使用Python和pymongo来操作MongoDB。

1. 安装pymongo

首先,你需要安装pymongo库。你可以使用pip来安装:

bash复制代码

pip install pymongo

2. 连接到MongoDB

创建一个MongoDB客户端,并连接到MongoDB服务器。如果你使用的是本地MongoDB实例,并且使用的是默认端口(27017),那么连接将非常简单。

from pymongo import MongoClient  

# 创建MongoDB客户端  
client = MongoClient('mongodb://localhost:27017/')  

# 获取数据库,如果不存在则创建  
db = client['mydatabase']  # 使用mydatabase作为数据库名  

# 获取集合,如果不存在则创建  
collection = db['mycollection']  # 使用mycollection作为集合名

3. 插入数据

使用insert_one()insert_many()方法来插入数据。

# 插入单条数据  
document = {"name": "Alice", "age": 30}  
result = collection.insert_one(document)  
print(f"Inserted document with ID: {result.inserted_id}")  

# 插入多条数据  
documents = [  
    {"name": "Bob", "age": 25},  
    {"name": "Charlie", "age": 35}  
]  
result = collection.insert_many(documents)  
print(f"Inserted {len(result.inserted_ids)} documents")

4. 查询数据

使用find_one()find()方法来查询数据。

# 查询单个文档  
result = collection.find_one({"name": "Alice"})  
print(result)  

# 查询多个文档  
results = collection.find({"age": {"$gt": 28}})  # 查询年龄大于28的文档  
for doc in results:  
    print(doc)

5. 更新数据

使用update_one()update_many()方法来更新数据。

# 更新单个文档  
result = collection.update_one({"name": "Alice"}, {"$set": {"age": 31}})  
print(f"Matched {result.matched_count} documents and updated {result.modified_count}")  

# 更新多个文档  
result = collection.update_many({"age": {"$lt": 30}}, {"$set": {"status": "young"}})  
print(f"Matched {result.matched_count} documents and updated {result.modified_count}")

6. 删除数据

使用delete_one()delete_many()方法来删除数据。

# 删除单个文档  
result = collection.delete_one({"name": "Bob"})  
print(f"Deleted {result.deleted_count} document")  

# 删除多个文档  
result = collection.delete_many({"age": {"$gt": 30}})  
print(f"Deleted {result.deleted_count} documents")

7. 关闭连接

在完成所有操作后,建议关闭MongoDB客户端连接。

client.close()

以上只是pymongo库的基本用法示例。实际上,pymongo提供了许多其他功能和选项,例如索引管理、聚合管道、事务处理等,你可以查阅官方文档来了解更多高级用法:https://pymongo.readthedocs.io/en/stable/

发表回复

您的电子邮箱地址不会被公开。