一篇文章带你掌握MongoDB

文章目录

  • 1. 前言
  • 2. MongoDB简介
  • 3. MongoDB与关系型数据库的对比
  • 4. MongoDB的安装
  • 5. Compass的使用
  • 6. MongoDB的常用语句
  • 7. 总结

1. 前言

本文旨在帮助大家快速了解MongoDB,快速了解和掌握MongoDB的干货内容.

2. MongoDB简介

MongoDB是一种NoSQL数据库,采用了文档数据库模型。它以BSON(Binary JSON)格式存储数据,支持动态模式和灵活的查询语言。MongoDB具有以下特点:

  1. 文档存储:MongoDB以文档(Document)的形式存储数据,每个文档是一个自包含的数据单元,类似于关系型数据库的行。
  2. 动态模式:MongoDB不需要预定义的表结构,可以根据需要动态添加字段,更加灵活。
  3. 分布式存储:MongoDB支持分片和副本集等方式进行水平扩展和高可用性部署。
  4. 强大的查询语言:MongoDB支持丰富的查询语言,包括嵌套查询、索引和聚合操作等,可以满足各种查询需求。

MongoDB适用于需要处理半结构化数据、大规模数据和高并发读写的场景,例如Web应用的用户数据、日志数据的存储和分析等。它提供了灵活的数据模型和强大的查询能力,使得开发者可以更加高效地处理复杂的数据操作。

NoSQL(Not Only SQL)是一种非关系型数据库(Non-Relational Database)的分类,与传统的关系型数据库(RDBMS)相对应。NoSQL数据库的设计目标是解决关系型数据库在大规模数据存储和高并发读写方面的限制。

3. MongoDB与关系型数据库的对比

MongoDB是一个文档型数据库,而关系型数据库则是一种基于表格的数据库。
在这里插入图片描述
可以看到还是有许多相似的地方,但也有很多不同.MongoDB提供了更好的可扩展性和大数据处理能力,而关系型数据库则更适用于小型企业和机构级别的数据处理。

4. MongoDB的安装

官网:MongoDB:应用程序数据平台 | MongoDB
在这里插入图片描述
选择Community Server
在这里插入图片描述
选择版本以及对应的操作系统后,点击 Download 即可开始安装
在这里插入图片描述
下载完成之后打开安装包,一直点击 next 就可以了
在这里插入图片描述
安装完成之后,桌面会出现一个MongoDB的GUI工具Compass的快捷方式
在这里插入图片描述

5. Compass的使用

双击打开,会看到以下界面:
点击Connect即可连接本地的MongoDB服务
在这里插入图片描述
在这里插入图片描述
注: admin,config和local为MongoDB默认的数据库

此外在Compass的下方有一个mongosh的交互式命令行终端,就可以输入一些命令来操作MangoDB
在这里插入图片描述
在这里插入图片描述

6. MongoDB的常用语句

查看数据库:

show databases
show dbs

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

选中/创建数据库:

use [database]

注: 即使这个数据库不存在也可以运行.如果数据库不存在,则创建数据库,否则切换到指定数据库。
示例:
在这里插入图片描述
可以看到虽然创建了game数据库,但是查看数据库时并没有这个数据库.这是因为数据库中没有数据

接下来我们来插入几条数据,但首先先来了解一下MongDB中文档的概念:

MongoDB集合是MongoDB文档数据存储的基本单位,类似于关系数据库中的表。它是一个无架构的容器,可以存储任意的文档数据。MongoDB的文档数据是使用JSON格式表示的,它们可以包含不同的字段和值。

插入一个文档到集合中:

db.collection.insertOne()

示例:

在这里插入图片描述

db.user表示创建了一个名为user的集合

insertOne():用于插入文档到集合中

返回值:

  • acknowledged: 表示这条数据是否插入成功,成功返回true
  • insertedId: 全局唯一id,由Mongodb生成

查询集合中的数据:

db.collection.find()

示例:

在这里插入图片描述
MongDB中的不同文档的结构并不要求相同,如下图所示:
在这里插入图片描述
可以看到一条数据有age字段,另一条数据没有age字段.,这也是与MySQL中的行不一样的地方.
插入多条数据:

db.collection.insertMany()

示例:

在这里插入图片描述
在这里插入图片描述
限制查询返回结果的数量:

limit()

示例:
在这里插入图片描述
排序查询结果:

sort()

示例:

在这里插入图片描述
sort中的参数是一个对象,要传入一个字段,为比较的对象. 1表示升序,-1表示降序.

当然也可以比较多个参数,只需要再参数的后面再加一个参数就可以了

如下所示:

db.user.find().sort({age:1,name:1})

跳过一些查询结果:

skip()

示例:

在这里插入图片描述
表示的是查询按照年龄升序 ,并跳过前两条的数据

一般来说 skip函数都是和sort函数一起使用的,用来实现分页的功能

条件查询:

find({field:value})

示例:

查询年龄为20的用户
在这里插入图片描述
注意如果输入的是"20",那么就不会产生任何数据,因为MongoDB中的数据类型是非常严格的
在这里插入图片描述
其中第二个字段后面的数据1,表示要返回的字段

这里的_id是MongoDB自动返回的,如果不想返回,可以在第二参数中加上_id,值为0

在这里插入图片描述
MongoDB中也可以使用一些运算符来实现复杂查询的语句

例如返回年龄大于18的用户在这里插入图片描述
其中$gt就是>,常见的运算符如下:

lt:less than 小于
le:less than or equal to 小于等于
eq:equal to 等于
ne:not equal to 不等于
ge:greater than or equal to 大于等于
gt:greater than 大于

$in()可以查询某个字段的值是否在一个数组中

例如查询年龄为18和20的用户
在这里插入图片描述
当然也可以使用$nin()查询某个字段的值是否不在一个数组中

$exists()判断某个字段是否存在

查询具有age字段的用户:其中1或true表示存在,0和false表示不存在在这里插入图片描述
其中1或true表示存在,0和false表示不存在
以下也是一些常用的MongoDB命令:

  • $exists()只能判断某个字段是否存在,但不能判断某个字段的值是否存在
  • $and:[{条件1},{条件2}]:逻辑与
  • $or:[{条件1},{条件2}]:逻辑或
  • $not:{条件}: 逻辑非
  • $regex:/expression/:正则表达式
  • countDocuments():统计文档数量
  • findOne({filter}):查询满足条件的一条数据
  • updateOne():更新满足条件的一条数据
  • updateMany():更新满足条件的多条数据
  • deleteOne():删除满足条件的一条数据
  • deleteMany():删除满足条件的多条数据

7. 总结

MongoDB是一个功能强大的数据库管理系统,适合处理具有高度的非结构化数据和数据量的应用程序。它用于各种用例,包括Web应用程序、大数据等,具有高可伸缩性、高性能、高可用性、分布式和非结构化数据存储等特点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/205338.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot的在线视频教育平台的设计与实现

摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于在线视频教育平台当然也不能排除在外,随着网络技术的不断成熟,带动了在线视频教育平台,它彻底改变了过…

C++ -- 每日选择题 -- Day2

第一题 1. 下面代码中sizeof(A)结果为() #pragma pack(2) class A {int i;union U{char str[13];int i;}u;void func() {};typedef char* cp;enum{red,green,blue}color; }; A:20 B:21 C:22 D:24 答案及解析…

Python基础学习之包与模块详解

文章目录 前言什么是 Python 的包与模块包的身份证如何创建包创建包的小练习 包的导入 - import模块的导入 - from…import导入子包及子包函数的调用导入主包及主包的函数调用导入的包与子包模块之间过长如何优化 强大的第三方包什么是第三方包如何安装第三方包 总结关于Python…

[pyqt5]PyQt5之如何设置QWidget窗口背景图片问题

目录 PyQt5设置QWidget窗口背景图片 QWidget 添加背景图片问题QSS 背景图样式区别PyQt设置窗口背景图像,以及图像自适应窗口大小变化 总结 PyQt5设置QWidget窗口背景图片 QWidget 添加背景图片问题 QWidget 创建的窗口有时并不能直接用 setStyleSheet 设置窗口部分…

2023.11.27 使用anoconda搭建tensorflow环境

2023.11.27 使用anoconda搭建tensorflow环境 提供一个简便安装tensorflow的方法 1. 首先安装anoconda,安装过程略,注意安装的时候勾选安装anoconda prompt 2. 进入anoconda prompt 3. 建立python版本 conda create -n tensorflow1 python3.84. 激活t…

Java开发规范(简洁明了)

本篇规范基于阿里巴巴开发手册,总结了一些主要的开发规范,希望对大家有帮助。 目录 1. 命名规范: 2. 缩进和空格: 3. 花括号: 4. 注释: 5. 空行: 6. 导入语句: 7. 异常处理&a…

源 “MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。

源 “MySQL 8.0 Community Server“ 的 GPG 密钥已安装,但是不适用于此软件包。请检查源的公钥 URL 是否配置正确。yum install mysql-server --nogpgcheck

电子商务网站的技术 SEO:完整指南

技术 SEO 涉及对您的网站进行更改,这些更改由搜索引擎蜘蛛读取并由搜索结果索引。它简化了搜索引擎读取您网站的方式。如果不包括技术 SEO 服务,你就不可能有一个成功的电子商务 SEO 计划。主要目标是增强网站的框架。 在线商店的技术搜索引擎优化建议 …

熟悉SVN基本操作-(SVN相关介绍使用以及冲突解决)

一、SVN相关介绍 1、SVN是什么? 代码版本管理工具它能记住你每次的修改查看所有的修改记录恢复到任何历史版本恢复已经删除的文件 2、SVN跟Git比,有什么优势 使用简单,上手快目录级权限控制,企业安全必备子目录checkout,减少…

Redis应用的16个场景

常见的16种应用场景: 缓存、数据共享分布式、分布式锁、全局 ID、计数器、限流、位统计、购物车、用户消息时间线 timeline、消息队列、抽奖、点赞、签到、打卡、商品标签、商品筛选、用户关注、推荐模型、排行榜. 1、缓存 String类型 例如:热点数据缓存&#x…

【驱动】SPI驱动分析(四)-关键API解析

关键API 设备树 设备树解析 我们以Firefly 的SPI demo 分析下dts中对spi的描述&#xff1a; /* Firefly SPI demo */ &spi1 {spi_demo: spi-demo00{status "okay";compatible "firefly,rk3399-spi";reg <0x00>;spi-max-frequency <48…

C#工程中Form_xx.cs不能在设计器中查看

环境&#xff1a;VS2022 直接上图&#xff1a; 原因&#xff1a; 写了个类在Form_xx.cs中从For继承的部分类之前&#xff0c;移动到之后&#xff0c;保证窗体类是代码中的首个类即可&#xff0c;如图&#xff1a;

python pytorch实现RNN,LSTM,GRU,文本情感分类

python pytorch实现RNN,LSTM&#xff0c;GRU&#xff0c;文本情感分类 数据集格式&#xff1a; 有需要的可以联系我 实现步骤就是&#xff1a; 1.先对句子进行分词并构建词表 2.生成word2id 3.构建模型 4.训练模型 5.测试模型 代码如下&#xff1a; import pandas as pd im…

【强迫症患者必备】SpringBoot项目中Mybatis使用mybatis-redis开启三级缓存必须创建redis.properties优化方案

springboot项目中mybatis使用mybatis-redis开启三级缓存需要创建redis.properties优化方案 前言下载mybatis-redis源码分析RedisCache 代码RedisConfigurationBuilder的parseConfiguration方法 优化改造1.创建JedisConfig类2.复制RedisCache代码创建自定义的MyRedisCache3.指定…

INA219电流感应芯片_程序代码

详细跳转借鉴链接INA219例程此处进行总结 简单介绍一下 INA219&#xff1a; 1、 输入脚电压可以从 0V~26V,INA219 采用 3.3V/5V 供电. 2、 能够检测电流&#xff0c;电压和功率&#xff0c;INA219 内置基准器和乘法器使之能够直接以 A 为单位 读出电流值。 3、 16 位可编程地…

计算机体系结构----流水线技术(三)

本文仅供学习&#xff0c;不作任何商业用途&#xff0c;严禁转载。绝大部分资料来自----计算机系统结构教程(第二版)张晨曦等 计算机体系结构----流水线技术&#xff08;三&#xff09; 3.1 流水线的基本概念3.1.1 什么是流水线3.1.2 流水线的分类1. 部件级流水线、处理机级流…

DCAMnet网络复现与讲解

距论文阅读完毕已经过了整整一周多。。。终于抽出时间来写这篇辣&#xff01;~ 论文阅读笔记放这里&#xff1a; 基于可变形卷积和注意力机制的带钢表面缺陷快速检测网络DCAM-Net&#xff08;论文阅读笔记&#xff09;-CSDN博客 为了方便观看&#xff0c;我把结构图也拿过来了。…

Unity 一些常用注解

在Unity中有一些比较常用的注解&#xff1a; 1、[SerializeField]&#xff1a;将私有字段或属性显示在 Unity 编辑器中&#xff0c;使其可以在 Inspector 窗口中进行编辑。 2、[Range(min, max)]&#xff1a;限制数值字段或属性的范围&#xff0c;在 Inspector 窗口中以滑动条…

【合集】MQ消息队列——Message Queue消息队列的合集文章 RabbitMQ入门到使用

前言 RabbitMQ作为一款常用的消息中间件&#xff0c;在微服务项目中得到大量应用&#xff0c;其本身是微服务中的重点和难点。本篇博客是Message Queue相关的学习博客文章的合集篇&#xff0c;目前主要是RabbitMQ入门到使用文章&#xff0c;后续会扩展其他MQ。 目录 前言一、R…

中国毫米波雷达产业分析3——毫米波雷达市场分析(四、五、六)

四、康养雷达市场 &#xff08;一&#xff09;市场背景 1、政府出台系列政策提升智慧健康养老产品供给和应用 康养雷达是一种以老年人为主要监测对象&#xff0c;可以实现人体感应探测、跌倒检测报警、睡眠呼吸心率监测等重要养老监护功能的新型智慧健康养老产品。 随着我国经…