MongoDB基础认识

news2024/11/19 5:52:41

MongoDB数据库介绍

  • 名称源自“humongous”(意为“巨大无比”)。
  • MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。
  • 在高负载的情况下,添加更多的节点,可以保证服务器性能。
  • MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
  • 官方网站:https://www.mongodb.com/
  • 官方文档:https://www.mongodb.com/docs/manual/
  • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成.MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
  • 主要特点:
    • 提供了一个面向文档存储,操作起来比较简单和容易
    • 可以设置任何属性的索引来实现更快的排序
    • 具有较好的水平可扩展性
    • 支持丰富的查询表达式,可轻易查询文档中内嵌的对象及数组
    • 可以实现替换已完成文档的一些指定的数据字段
    • MongoDB可以对数据进行批量处理和聚合操作
    • 支持复制和故障恢复
    • 支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等语言
    • MongoDB安装简单
  • 适用场景:MongoDB更多适合于大数据量、高并发、弱事务的互联网应用,其内置的水平扩展机制提供了从几百万到十亿级别的数据处理能力,可以很好的满足Web2.0和移动互联网应用的数据存储要求。

MongoDB数据库的安装和使用

  • MongoDB Server下载地址: https://www.mongodb.com/download-center/community
  • Shell客户端下载地址:https://www.mongodb.com/products/shell
  • MongoDB Compass图形化客户端下载地址: https://www.mongodb.com/products/compass
  • 启动/关闭MongoDB服务:
    • MongoDB安装目录的bin目录下,双击mongod.exe,即可启动服务
    • 关闭MongoDB服务在计算机服务中停止即可。
  • 使用MongoDB服务:
    • MongoDB Shell是MonoDB客户端工具,可以在Shell中使用命令与MongoDB实例交互,对数据库的管理操作(CURD、集群配置、状态查看等)都可以通过MongoDB Shell来完成。
    • MongoDB Shell = JavaScirpt解释器 + MongoDB客户端
  • 使用MongoDB Shell访问MongoDB:
    • 双击mongosh.exe,输入命令mongodb://127.0.0.1:27017,其中127.0.0.1为所连机器的ip,27017为默认的MongoDB端口号
    • 默认的数据库为test数据库
  • 使用MongoDB Shell运行js脚本:
    • OS命令行下,运行一个js文件,Mongosh的bin目录添加到环境变量中,命令行中输入 mongosh [–quiet] D:/script.js
    • 在mongo shell 交互模式下,运行一个js文件输入 load('D:/script.js’)
    • .mongoshrc.js 文件(位于用户主目录)启动shell时会自动加载运行,加上–norc参数,就可以禁止加载

MongoDB概念解析

解析

在这里插入图片描述
举例:在一个关系型数据库中,一篇博客(包含文章内容、评论、评论的投票)会被打散在多张数据表中。在文档数据库MongoDB中,能用一个文档来表示一篇博客, 评论与投票作为文档数组,放在正文主文档中。这样数据更易于管理,消除了传统关系型数据库中影响性能和水平扩展性的“JOIN”操作:
在这里插入图片描述
在这里插入图片描述

数据库

  • 一个Mongodb中可以建立多个数据库
  • MongoDB的默认数据库为“test",该数据库存储在data目录中
  • MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中
  • 多个文档组成集合,而多个集合组成了数据库
  • show dbs 命令可以显示所有数据库的列表

数据库命名

  • 不能是空字符串(“”)
  • 不能以$开头
  • 不能含有.和空字符串。
  • 数据库名字区分大小写(建议数据库名全部使用小写)
  • 数据库名字长度最多64字节。
  • 不要与系统保留的数据库名字相同,这些数据库包括:admin、local、 config等

集合

  • 集合就是 MongoDB文档组,类似于RDBMS 中的表格。
  • 集合存在于数据库中,没有固定的结构,这意味着可对集合可以插入不同格式和类型的数据
  • MongoDB 数据类型较多,有字符型、整型、布尔型、双精度等
  • MongDB提供了一些特殊功能的集合,例如:capped、collection,system.indexes,system.namespaces等。

集合命名

  • 集合名不能是空字符串""
  • 集合名不能含有\0字符(空字符),(表示集合名的结尾)
  • 集合名不能以system.开头,此前缀是系统本身保留的
  • 集合名中不能包含$字符(注:可包含.)

文档

  • 文档是MongoDB最核心的概念,本质是一种类JSON的BSON格式的数据。
  • BSON是一种类JSON的二进制格式数据,它可以理解为JSON基础上添加了一些新的数据类型,包括日期、int32、int64等。
  • BSON是由一组组键值对组成,它具有轻量性、可遍历性和高效性三个特征。可遍历性是MongoDB将BSON作为数据存储的主要原因。
  • BSON官网地址:http://bsonspec.org/

文档注意

  • MongoDB中写操作的原子性限制在文档级别,对文档的保存、修改、删除等都是原子操作
  • 单个文档占用的存储空间不能超过16MB
  • MongoDB会尽量保持文档被插入时键值对的顺序

文档命名

  • _id是系统保留的关键字,它是默认的主键,该值在集合中必须唯一,且不可修改
  • 键不能包含\0或空字符。(这个字符用于表示键的结尾)
  • 不能以$开头
  • 不能包含.(点号)
  • 键是区分大小写的且不能重复 例如:{foo:1,Foo:1}

命名空间

  • 把数据库名添加到集合名字前面,中间用点号连接,得到集合的完全限定名,就是命名空间,例如:命名空间database.parent 。
  • 需要说明的是,点号还可以出现在集合名字中,例如:parent.subling0,parent.subling1可以将subling0和subling1集合看作是parent集合的子集合。
  • 使用子集合可以使我们更好的组织数据,使数据的结构更加清晰明了

简单语句

  1. 创建/切换数据库:use db1
  2. 查看所有数据库:show dbs
  3. 删除当前数据库:db.dropDatabase()
  4. 创建集合:db.createCollection(“c1”)
  5. 创建集合并添加数据db.dept.insertOne({deptno:1,deptname:“技术部”,location:“beijing”})
  6. 查看集合:show collections
  7. 删除集合:db.collection_name.drop()
  8. 查看所有文档数据:db.dept.find()
  9. 查看单独的一个文档:db.dept.findOne()

MongoDB数据类型简介

BSON可以理解为在JSON基础上添加了一些新的数据类型,包括Date,正则表达式,对数值类型的更进一步划分等。
在这里插入图片描述
在这里插入图片描述

  • MongoDB 中 $type 是一个条件操作符。 $type 基于 BSON 类型来检索集合中匹配的数据类型,并返回结果。
  • 由于 MongoDB 对于文档(记录)的格式要求比较自由,所以同一个KEY(字段)中可以包含不同类型的数值。$type 用于过滤指定类型的数据:
    • db.collection.find({KEY : {$type : TYPE_NAME}})
    • db.stu.find({name:{$type:2}})

MongoDB数据类型应用

  • null :表示空值或不存在的字段。 例如db.collection.find({age:null})
  • 布尔:有两个值true或false 。例如:{y:true}
  • 数值类型: 支持32-int、64-int以及64-double如果使用mongodb shell表示数字,默认都是浮点型
    • {y:10} – double
    • y:NumberInt(10)} - 32
    • {y:NumberLong(10)} - 64
  • 字符串:使用UTF-8对字符串进行编码。例如:{y:“Hello MongoDB”}
  • 二进制数据可以保存由任意字节组成的字符串,例如:图片、视频等。
  • 正则表达式:主要用于查询,使用正则表达式作为限定条件
    • {name:/foo/} name字段含有foo的文档
    • {name:/foo/i} name字段含有foo的文档,且不区分大小写
    • {name:/^foo/i} name字段以foo幵头,且不区分大小写
  • JavaScript代码:文档中可以包含任意的JavaScript代码
    • {func:function functionname( ){}}
  • Date日期:MongoDB中,日期类型是一个64位的整数,它代表的是Unix epoch的毫秒数,MongoDB在存储时间时,先转化为UTC时间
    • 北京时间(CST) = UTC + 8个小时
    • MongoDBShell中可以使用new Date或ISODate来创建时间对象,使用Date以字符串的形式返回当前日期。
  • 时间戳类型有两部分组成:Timestamp只供MongoDB数据库服务内部使用,用于记录操作的详细时间,Timestamp类型和Date类型是没有关系的,对于我 们来说使用更多的Date类型。
    • 获取当前时间的时间戳:Date.parse(new Date())
  • ObjectId:由24个十六进制字符构成,每个字节存储两位十六进制数字,总共需要12字节存储空间
    • 例如:{“_id”:ObjectId(“5a7866e75640374fb2cd5623”)}

    • 每个字节代表的含义如下:在这里插入图片描述

    • 相关函数:

      • ObjectId() 用于创建ObjectID
      • getTimestamp() 用于取得ObjectID的时间戳
      • valueOf() 用于取得ObjectID的字符串表示
  • 内嵌文档:文档可以作为键的值,这样的文档称为内嵌文档。内嵌文档可以使数据不用保存成扁平结构的键值对,从而使数据组织方式更加自然。
    例如:下面是一个与博客管理有关的文档
    { _id: ,
    title: MongoDBDateModeln,
    author: foo,
    comments:[
    {who:“John”,comment:“Good”},
    {who:“Joe”,comment:“ExceUent”}]
    }
    在这里插入图片描述
  • 数组:数组是使用[]来表示的一组值,它既可以作为有序对象(列表、栈、队列),也能作为无序对象(如集合)来操作。
  • 数组中可以包含不同数据类型的元素(字符串、浮点数、文档等)
    例如:[3.14,“hello”,[l2,3],{“key”:“MongoDB”}]
  • 针对数组MongoDB提供了许多特定的操作符,例如:$ push, $ pop,$ pull,$ slice,$addToSet等
  • MongoDB可自动的为数组元素建立Multikey索引

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

备战蓝桥杯---搜索(DFS基础1)

何为深搜&#xff1f; 即不撞南墙不罢休。 话不多说&#xff0c;直接看题&#xff1a; 我们可以把这看成深搜的模板题&#xff0c;下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int a[15];//存值并输出 int vis[15]; int n18; void dfs(int …

Nicn的刷题日常之喝汽水问题

目录 1.题目描述 2.解题思路 3.解题 4.思路2 解题 1.题目描述 喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;给20元&#xff0c;可以喝多少汽水&#xff08;编程实现&#xff09;。 2.解题思路 1. 20元首先可以喝20瓶&#xff0c;此时手…

书生浦语2-对话-20B大模型部署实践

简介 书生浦语2.0是一个大语言模型&#xff0c;是商汤科技与上海 AI 实验室联合香港中文大学和复旦大学发布的新一代大语言模型。‘ 具体特性 有效支持20万字超长上下文&#xff1a;模型在 20 万字长输入中几乎完美地实现长文“大海捞针”&#xff0c;而且在 LongBench 和 L…

Python程序设计 函数基础

简单函数 函数&#xff1a;就是封装了一段可被重复调用执行的代码块。通过此代码块可以实现大量代码的重复使用。 函数的使用包含两个步骤&#xff1a; 定义函数 —— 封装 独立的功能 调用函数 —— 享受 封装 的成果 函数的作用&#xff0c;在开发程序时&#xff0c;使用…

2024年美赛F题超详细思路

Problem F: Reducing Illegal Wildlife Trade 美赛F题以非法野生动物贸易为背景进行命题&#xff0c;需要我们选择客户进行一系列的问题。本文正式解题前需要收集客户的数据以及数据预处理。对于客户的选择&#xff0c;这里考虑的点在于该客户需要能够对非法贸易交易产生影响。…

el-upload子组件上传多张图片(上传为files或base64url)

场景&#xff1a; 在表单页&#xff0c;有图片需要上传&#xff0c;表单的操作行按钮中有上传按钮&#xff0c;点击上传按钮。 弹出el-dialog进行图片的上传&#xff0c;可以上传多张图片。 由于多个表单页都有上传多张图片的操作&#xff0c;因此将上传多图的el-upload定义…

6、基于机器学习的预测

应用机器学习的任何预测任务与这四个策略。 文章目录 1、简介1.1定义预测任务1.2准备预测数据1.3多步预测策略1.3.1多输出模型1.3.2直接策略1.3.3递归策略1.3.4DirRec 策略2、流感趋势示例2.1多输出模型2.2直接策略1、简介 在第二课和第三课中,我们将预测视为一个简单的回归问…

Python开源项目周排行 2024年第3周

ython 趋势周报&#xff0c;按周浏览往期 GitHub,Gitee 等最热门的Python开源项目&#xff0c;入选的项目主要参考GitHub Trending,部分参考了Gitee和其他。排名不分先后&#xff0c;都是当周相对热门的项目。 入选公式&#xff1d;70%GitHub Trending20%Gitee10%其他 关注微…

K8S-NFS-StorageClass

工作流程 K8s中部署NFS-StorageClass K8s的StorageClass提供了为集群动态创建PV的能力。 1.部署NFS服务 2.选择NFS的Provinisoner驱动 K8S中没有内置的NFS的制备器&#xff0c;而定义StorageClass的时候需要指定制备器&#xff08;Pervisioner&#xff09;,所以需要&#xf…

Pycharm Community 配置调试Behave

前提&#xff1a;python小白&#xff0c;临时搞python项目&#xff0c;公司限制使用Pycharm版本&#xff0c;故只能使用社区版&#xff0c;然而官方有明确说明&#xff1a;只有Professional版支持Behave。故研究了半天才整清楚社区版调试Behave的设置 没有进行下面的步骤之前&…

C++面试宝典第26题:螺旋矩阵

题目 给你一个正整数n,生成一个包含1到n的平方的所有元素,且元素按顺时针顺序螺旋排列成n x n的正方形矩阵。 示例: 输入:n = 3 输出:[[1,2,3],[8,9,4],[7,6,5]] 解析 螺旋矩阵是指按照顺时针(或逆时针)螺旋顺序排列元素的二维矩阵。比如:给定一个如下的3x3矩阵,按顺…

PSoc62™开发板之WDT应用

看门狗 看门狗定时器(WDT)是一种硬件定时器&#xff0c;在出现意外固件时自动复位设备执行路径。如果启用了WDT&#xff0c;则必须在固件中定期进行服务&#xff0c;以避免复位。否则&#xff0c;计时器失效并产生一个设备复位。此外&#xff0c;WDT可以用作中断源或在低功耗唤…

正点原子--STM32定时器学习笔记(1)(更新中....)

F1系列基本定时器&#xff08;TIM6 / TIM7&#xff09; 我们的目标是通过TIM6基本定时器定时500ms&#xff0c;让LED0每隔500ms闪一下&#xff01; 思路&#xff1a;使用定时器6&#xff0c;实现500ms产生一次定时器更新中断&#xff0c;在中断里执行“翻转LED0”。 定时器什…

2024021期传足14场胜负前瞻

2024021期赛事由亚洲杯2场、英超5场&#xff0c;德甲6场、非洲杯1场组成。售止时间为2月3日&#xff08;周六&#xff09;19点00分&#xff0c;敬请留意&#xff1a; 本期1.5以下赔率3场&#xff0c;1.5-2.0赔率3场&#xff0c;其他场次基本皆是平半盘、平盘。本期14场整体难度…

第三百零三回

文章目录 1. 概念介绍2. 实现方法2.1 文字信息2.2 红色边框 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现密码输入框"相关的内容&#xff0c;本章回中将介绍如何在在输入框中提示错误.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…

LabVIEW CVT离合器性能测试

介绍了CVT&#xff08;连续变速器&#xff09;离合器的性能测试的一个应用。完成了一个基于LabVIEW软件平台开发的CVT离合器检测与控制系统&#xff0c;通过高效、准确的测试方法&#xff0c;确保离合器性能达到最优。 系统采用先进的硬件配合LabVIEW软件&#xff0c;实现了对…

python-自动化篇-运维-实现读取日志文件最后一行的时间

文章目录 1. 使用Python打开日志文件2.python读取文件最后一行两种方式3.读取当前时间&#xff0c;进行两者相减&#xff0c;超时报警4.将内容推送到企业微信5. 关闭日志文件整体代码 1. 使用Python打开日志文件 在开始实时读取日志文件之前&#xff0c;我们首先需要打开一个日…

深入了解键盘:分类、工作原理与操作指南

键盘 键盘是计算机使用的主要输入设备之一&#xff0c;键盘主要由创建字母、数字和符号并执行附加功能的按钮组成&#xff0c;通常用于向计算机或其他数字设备输入文本、命令和各种控制信号。 键盘是计算机中最重要的字符输入设备&#xff0c;其基本组成元件是按键开关&#…

画质和场景双需求下,海信电视U8KL的变与不变

又到一年春节&#xff0c;最近几年大家过年的方式越来越丰富&#xff0c;但是跟家人在一起看春晚依然是主流&#xff0c;电视也是过年不可或缺的家庭成员。 当然&#xff0c;随着大家对生活品质的要求更高&#xff0c;对电视的要求也变得更高了。比如&#xff0c;现在春晚直播…

ESP-IDF增加自定义组件开发过程记录

ESP-IDF增加自定义组件开发过程记录 记录一下&#xff0c;自定义组件开发方式容易实现代码的复用。比如说在实现一些芯片或者模块的代码上&#xff0c;网上先找找有的话就可以不用自己写了&#xff0c;实在没有的时候只能自己辛苦摸索编写了。 前言: 因为对cmake也不懂&…