足够详细的MongoDB教程(1)

 简介

MongoDB是一个开源,高性能,无模式的文档型数据库,当初的设计就是用于简化开发和方便扩展,是NoSQL数据库产品中的一种.是最 像关系型数据库(MySQL)的非关系型数据库. 它支持的数据结构非常松散,是一种类似于 JSON 的 格式叫BSON(Binary JSON),所以它既可以存储比较复杂的数据类型,又相当的灵活. MongoDB中的记录是一个文档,它是一个由字段和值对(field:value)组成的数据结构.MongoDB文档类似于JSON对象,即一个文档认 为就是一个对象.字段的数据类型是字符型,它的值除了使用基本的一些类型外,还可以包括其他文档,普通数组和文档数组.

数据模型

  • MongoDB 数据模型是面向文档的,所谓文档就是一种类似于 JSON 的结构,简单理解 MongoDB 这个数据库中存在的是各种各样的 JSON(BSON)
  • 数据库 (database)
    • 数据库是一个仓库,存储集合 (collection)
  • 集合 (collection)--->对应mysql的表
    • 类似于数组,在集合中存放文档
  • 文档 (document)----->对应mysql的行记录
    • 文档型数据库的最小单位,通常情况,我们存储和操作的内容都是文档
  • 在 MongoDB 中,数据库和集合都不需要手动创建,当我们创建文档时,如果文档所在的集合或者数据库不存在,则会自动创建数据库或者集合

 作为文档数据库的优点:

  • 文档(即对象)对应于许多编程语言中的内置数据类型。
  • 嵌入式文档和数组减少了对昂贵连接的需求。
  • 动态模式支持流畅的多态性。

可以解决的业务需求 ,即主要特性

  • 三高需求:高并发,高可用
  • High Performance: 对数据库的高并发读写的要求
  • High Storage: 对海量数据的高效率存储和访问的需求
  • High Scalability && High Available: 对数据的高扩展性和高可用性的需求
  • 主要特性

  • 高性能
    • MongoDB 提供高性能的数据持久化

    • 嵌入式数据模型的支持减少了数据库系统上的 I/O 活动
    • 索引支持更快的查询,并且可以包含来自嵌入式文档和数组的键 (文本索引解决搜索的需求,TTL 索引解决历史数据自动过期的需求,地理位置索引可以用于构件各种 O2O 应用)
    • mmapv1,wiredtiger,mongorocks (rocksdb) in-memory 等多引擎支持满足各种场景需求
    • Gridfs 解决文件存储需求
  • 高可用

    MongoDB 的复制工具称作副本集 (replica set) 可以提供自动故障转移和数据冗余

  • 高扩展

    水平扩展是其核心功能一部分

    分片将数据分布在一组集群的机器上 (海量数据存储,服务能力水平扩展)

    MongoDB 支持基于片键创建数据区域,在一个平衡的集群当中,MongoDB 将一个区域所覆盖的读写只定向到该区域的那些片

  • 其他

    MongoDB支持丰富的查询语言,支持读和写操作(CRUD),比如数据聚合,文本搜索和地理空间查询等. 无模式(动态模式),灵活的文档模型

 如何解决

  • 具体的应用场景:
    • 社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人,地点等功能.
    • 游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备,积分等直接以内嵌文档的形式存储,方便查询,高效率存储和访问.
    • 物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以 MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来.
    • 物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析.
    • 视频直播,使用 MongoDB 存储用户信息,点赞互动信息等.
  • 这些应用场景中,数据操作方面的共同点有:
    • 数据量大
    • 写入操作频繁
    • 价值较低的数据,对事务性要求不高

缺陷与注意事项 

  • 应用不需要事务及复杂 JOIN 支持
  • 新应用,需求会变,数据模型无法确定,想快速迭代开发
  • 应用需要 2000 - 3000 以上的读写QPS(更高也可以)
  • 应用需要 TB 甚至 PB 级别数据存储
  • 应用发展迅速,需要能快速水平扩展
  • 应用要求存储的数据不丢失
  • 应用需要 99.999% 高可用
  • 应用需要大量的地理位置查询,文本查询

与ES比较

优点 MongoDB Elasticsearch
灵活的数据模型 支持灵活的数据模型和动态模式,适应频繁变更的数据结构 适用于实时搜索和分析需求
强大的查询功能 提供丰富的查询语言和功能,包括聚合管道和全文本搜索 具有强大的全文本搜索和语义分析功能
水平扩展能力 支持水平扩展,可通过分片处理大规模数据集和高并发负载 基于分布式架构,具有良好的弹性和扩展性
多种数据类型支持 支持文本、数值、日期、地理位置、二进制数据等多种数据类型 适用于构建实时搜索和分析应用
缺点 MongoDB Elasticsearch
内存消耗较高 部分数据加载到内存中,对大规模数据集内存消耗较高 需要较多的存储空间和网络带宽,特别是处理大规模数据时
不适合复杂事务处理 事务处理功能相对较弱,不适合复杂的多文档事务处理 配置和使用相对复杂,有一定的学习曲线

数据类型 

数据类型

描述 内存占用
String 字符串,存储文本数据 取决于字符串长度
Integer 整数 4 字节
Double 双精度浮点数 8 字节
Boolean 布尔值 1 字节
ObjectId 文档唯一标识符 12 字节
Date 日期时间 8 字节
Array 数组,包含多个值 取决于元素个数和类型
Embedded Document 嵌入式文档,嵌套其他文档或对象 取决于文档的大小
Binary 二进制数据 取决于数据大小
Null 空值 0 字节
{
  "_id": ObjectId("615e1e7a9a1d890b6e88e2ac"),"name": "John Doe","age": 30,"isStudent": true,"salary": 50000.50,"birthDate": ISODate("1990-01-01T00:00:00Z"),"hobbies": ["reading","running","cooking"],"address": {
    "street": "123 Main St","city": "New York","country": "USA"
  },"profilePic": BinData(0,"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAK0lEQVQ4T2NkoBAwUqifg/AAGYvZXpB14AmaAAAAASUVORK5CYII="),"notes": null
}

MongoDB最新版安装

 直接官网下载msi安装程序,和mysql一样需要配置环境变量。

在下载好的data目录下创建一个db文件夹,并在文件路径下使用以下命令:

mongod --dbpath E:\wuhuanyicheng\apps\MongoDB\data\db

便可开启数据库服务,一般端口号为27017

 

 为方便开启MongoDB,将其注册成服务

  1. 首先在bin同级目录下创建mogo.config文件,文件内容如下
    dppath=E:\wuhuanyicheng\apps\MongoDB\data\db
    logpath=E:\wuhuanyicheng\apps\MongoDB\log\mongo.log
  2. 管理员身份打开dos命令窗口,在bin目录下执行该行命令

    mongod -dbpath "E:\wuhuanyicheng\apps\MongoDB\data\db" -logpath "E:\wuhuanyicheng\apps\MongoDB\log\mongo.log" -install 
    -serviceName "MongoDB
  3. 启动服务:

    net start MongoDB
  4. 关闭服务

    net stop MongoDB

安裝compass 可視化工具

MongoDB Compass Download (GUI) | MongoDB

 基本语法

数据库 (databases) 管理语法

操作 语法
查看所有数据库 show dbs; 或 show databases;
查看当前数据库 db;
切换到某数据库 (若数据库不存在则创建数据库) use <db_name>;
删除当前数据库 db.dropDatabase();

集合 (collection) 管理语法

操作 语法
查看所有集合 show collections;
创建集合 db.createCollection("<collection_name>");
删除集合 db.<collection_name>.drop()

默认存在的数据库 

数据库名 用途
admin 管理和监控MongoDB的特权数据库。包括用户管理、角色管理、集群管理,备份和恢复等。
config 存储用于支持MongoDB分片功能的配置信息。包括分片键、分片集合、分片节点等。
local 当前节点的本地数据库。包括存储复制集状态、操作日志、节点信息等。
test 默认的测试数据库。在进行开发和测试时可以使用,用于临时存储数据和进行实Crud

Crud 

操作 语法 含义 示例
创建 db.<collection_name>.insertOne(<document>) 创建一个新文档 db.users.insertOne({name: "John",age: 30})
db.<collection_name>.insertMany([<documents>]) 创建多个新文档 db.users.insertMany([{name: "John",age: 30},{name: "Jane",age: 25}])
读取 db.<collection_name>.find(<query>) 查询满足条件的文档 db.users.find({age: {$gt: 25}})
db.<collection_name>.findOne(<query>) 查询满足条件的第一个文档 db.users.findOne({name: "John"})
更新 db.<collection_name>.updateOne(<query>,<update>) 更新满足条件的第一个文档 db.users.updateOne({name: "John"},{$set: {age: 35}})
db.<collection_name>.updateMany(<query>,<update>) 更新满足条件的所有文档 db.users.updateMany({name: "John"},{$set: {age: 35}})
db.<collection_name>.replaceOne(filter,replacement,options) 完全替换满足条件的第一个文档,包括其所有字段和值 db.users.replaceOne( { age: { $gte: 30 } },{ name: "John",age: 30,country: "UK" })
删除 db.<collection_name>.deleteOne(<query>) 删除满足条件的第一个文档 db.users.deleteOne({name: "John"})
db.<collection_name>.deleteMany(<query>) 删除满足条件的所有文档 db.users.deleteMany({age: {$gt: 30}})
  • filter:指定查询条件的文档。用于匹配要替换的目标文档。
  • replacement:用于替换目标文档的文档。完全替换目标文档,包括其所有字段和值。
  • options(可选):一个选项对象,用于指定额外的选项,如upsert(如果匹配的文档不存在,则插入一个新文档)和collation(指定排序规则)等。

原文地址:https://blog.csdn.net/wuhuanyicheng/article/details/131520236

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读552次。com.mongodb.MongoQueryException: Query failed with error code 292 and error message 'Executor error during find command :: caused by :: Sort exceeded memory limit of 104857600 bytes, but did not opt in to external sorting.' on server 11.51.141.63:27017 _mongodb 大文件 下载失败
文章浏览阅读635次,点赞9次,收藏8次。MongoDB 是一种 NoSQL 数据库,它将每个数据存储为一个文档,这里的文档类似于 JSON/BSON 对象,具体数据结构由键值(key/value)对组成。
文章浏览阅读2.1k次。和。_mongodb 日期类型
文章浏览阅读1.7k次。Scalestack等客户期待使用MongoDB Atlas Vector Search和Amazon Bedrock构建下一代应用程序
文章浏览阅读970次。SpringBoot整合中间件mongodb、ES_springboot3 elasticsearch json数据
文章浏览阅读673次。MongoDB 简介_尚医通sql
文章浏览阅读1k次,点赞8次,收藏9次。官网下载MongoDB安装包后进行解压(因了解并不深入,故暂不进行详细说明,自行查找其他安装方法,后期了解深入后将进行该教程的完善)在bin目录下使用命令启动:./mongod --config …/mongodb.conf。该文章任然处于完善中,如果存在错误遗漏的地方,欢迎私信联系。安装相关的nuget包后即可通过以下方法连接数据。YX9010_0@的第二十篇文章。
文章浏览阅读1.2k次,点赞17次,收藏26次。社交场景, 使用 MongoDB 存储存储用户信息, 以及用户发表的朋友圈信息, 通过地理位置索引实现附近的人, 地点等功能.游戏场景, 使用 MongoDB 存储游戏用户信息, 用户的装备, 积分等直接以内嵌文档的形式存储, 方便查询, 高效率存储和访问.物流场景, 使用 MongoDB 存储订单信息, 订单状态在运送过程中会不断更新, 以 MongoDB 内嵌数组的形式来存储, 一次查询就能将订单所有的变更读取出来.物联网场景, 使用 MongoDB 存储所有接入的智能设备信息, 以及设备汇报的日
文章浏览阅读686次。您可以使用 update_one() 方法来更新 MongoDB 中调用的记录或文档。update_one() 方法的第一个参数是 query 对象,用于定义要更新的文档。注释:如果查询找到多个记录,则仅更新第一个匹配项。第二个参数是定义文档新值的对象。_python 更新 mongodb 数据
文章浏览阅读1.3k次。首先来学习一下nosql这里安装就不进行介绍 只记录一下让自己了解mongodb。_nosql注入
文章浏览阅读4.1k次,点赞8次,收藏7次。在data的目录下,创建一个db文件。因为启动MongoDB服务之前必须创建数据库文件的存放文件夹,否则命令不会自动创建,而且不能启动成功。第一步:安装时,Custom是指可以自定义安装路径,然后傻瓜式安装即可(注意:先不要安装图形化工具,否则安装时间会特别长):如果要想连接成功,必须要开服务,即mongod -dbpath C:MongoDBdatadb的cmd要一直开着。然后回车,ctrl+F输入port找到端口号,一般为:27017。打开命令行,然后找到bin文件地址,并输入。_mongodb windows安装
文章浏览阅读5.1k次,点赞3次,收藏43次。详细介绍MongoDB数据库的基本知识,安装方法,基本操作,_mongodb数据库
文章浏览阅读3.2k次。安装教程翻看以往文章。_navicat 连接mongodb
文章浏览阅读426次,点赞9次,收藏12次。win10开放端口:https://blog.csdn.net/m0_43605481/article/details/119255256。我的是阿里云服务器,所以直接在安全组中加入规则,端口范围:27017,授权对象:0.0.0.0。windows在mongodb安装文件夹的bin文件夹中的mongod.cfg。数据库名字是test,打算创建一个用户,账号aaa,密码bbb,权限readWrite。因为该用户是创建在test数据库的,所以在最后要加上test。O了,然后恢复了test的数据。
文章浏览阅读1.1k次。聚合操作主要用于处理数据并返回计算结果。聚合操作将来自多个文档的值组合在一起,按条件分组后,再进行一系列操作(如求和、平均值、最大值、最小值)以返回单个结果。MongoDB的聚合查询​聚合是MongoDB的高级查询语言,它允许我们通过转化合并由多个文档的数据来生成新的在单个文档里不存在的文档信息。MongoDB中聚合(aggregate)主要用于处理数据(例如分组统计平均值、求和、最大值等),并返回计算后的数据结果,有点类似sql语句中的count(*)、groupby。..._如何将几个db的数据统整在一起做查询
文章浏览阅读680次,点赞7次,收藏8次。(2)application.properties配置文件。(4)UserService类。(5)测试和测试结果。
文章浏览阅读1k次,点赞17次,收藏25次。Studio 3T 2023.9 (macOS, Linux, Windows) - MongoDB 的专业 GUI、IDE 和 客户端,支持自然语言查询_mongodb客户端
文章浏览阅读1.1k次,点赞32次,收藏27次。插件式的存储引擎架构可以实现 Server 层和存储引擎层的解耦,可以支持多种存储引擎,如 MySQL 既可以支持 B-Tree 结构的 InnoDB 存储引擎,还可以支持 LSM 结构的 RocksDB 存储引擎。MongoDB 中的记录就是一个 BSON 文档,它是由键值对组成的数据结构,类似于 JSON 对象,是 MongoDB 中的基本数据单元。的简称,是 JSON 文档的二进制表示,支持将文档和数组嵌入到其他文档和数组中,还包含允许表示不属于 JSON 规范的数据类型的扩展。
文章浏览阅读5.1k次,点赞6次,收藏96次。本文设计了一种基于智能室内温度控制的自动调速风扇。以STM32系列单片机为核心主控板,通过程序代码驱动和使用温度传感器模块实现对环境温度的实时监测,并可以实时显示环境温度。同时,可以设置温度检测的上下警告值,根据需求自行调节。_stm32 温控风扇
文章浏览阅读898次,点赞13次,收藏21次。在MongoDB中,我们使用find()和find_one()方法来在集合中查找数据,就像在MySQL数据库中使用SELECT语句来在表中查找数据一样。_pymongo find_one