MongoDB随手笔记(一)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: MongoDB随手笔记(一)

夏天好热啊~本文章推荐开放空调阅读😊👉便携式迷你小空调


由于采用了黑科技,手机听筒放在脸庞可以有微风吹过,电脑端暂时没有实现,后续会继续优化~.

tips:这个空调我的文章中也有哦~

首先我们得知道SQL是什么,structured qurey language结构化查询语言,它也是一门高级语言,就像js和java这种一样,它也是一门单独的语言。最初的时候我以为它只是一种代名词,一种概念而已,现在才发现自己大错特错。

一.数据类型


MongoDB存储的数据类型为BSON(Binary-json)二进制JSON数据。

二.和用SQL写出来的数据库对比


MongoDB是NOSQL的代表类数据库,not only SQL

MongoDB存储的数据类型为BSON(Binary-json)二进制JSON数据。

image.png

简单来说更像是面向对象的一种写法,让有其它面向对象语言基础的程序员学习成本更低。

image.png

举个例子来说,现在一个学校想统计所有年级的所有班级里的所有老师和学生姓名性别。如果用SQL来统计的话,就好像你在电脑桌面创建了一个文件夹,文件夹一层一层嵌套着文件夹这种格式,我打开学校这个文件夹,里面会出现·年级1,·年级2..类似这样的结构:

学校-->年级1/年级2/-->(打开年级1的文件夹)1班/2班/3班--->(打开1班)-->老师/学生-->(选择老师)-->物理老师/语文老师.....等等

table joins就相当于这样一层嵌套着一层的表

而mongoDB来讲就是对象嵌套着对象:

image.png

在这里多嘴一句吧:我们学习mongo的时候,首先要理解清楚它的概念。首先启动服务器,就告诉数据库要往哪里存。服务器可以存放有多个数据库,而数据库就像是一所学校一样,数据库里要存放着一个一个的集合,类似于数组一样的,(这不是废话,认真)而集合里存放着文档,文档说白了就是最终的数据。集合相当于学校的各个班级,而文档就相当于各个班级里的学生。

image.png

启动mongoDB的服务器并且打开mongo的shell,shell的意思就和你的bash和zhr一样,直接对应用底层操作,只不过bash和zhr的对象是整个电脑,而mongo的shell就只是对于mongo而已,在这个shell上输入相关命令并不是操作服务器,而是操作数据库。

三.mongoDB的基本命令


关于怎么安装我的往期文章有详解不再过多赘述。

1.显示所有数据库:show dbs(show databases)的简写

image.png

2.use xxx(数据库名称)我就以学校为例子吧

在mongoShell中输入use grade,就会切换到grade 数据库

image.png

在这里可能会有疑问?我不是还没创建这个数据库吗,为什么就可以直接use呢?这是mongo的特性,当你使用use命令的时候,如果这个数据库存在,那么他就会切换到这个数据库,如果这个数据库不存在,那么它就会帮你暂时自动生成,为什么叫暂时呢?因为只有让这个数据库开始存放集合和文档的时候,它才会真正生成存放到服务器上。

这时候你再使用一下 show dbs我们发现其实grade并没有被放到服务器上。

image.png

3.db命令

这个命令可以显示自己现在在那个数据库,和bash zsh的pwd命令相似

image.png

4.show collections

看看数据库里有多少集合,就是看看有学校这个数据库多少班级

四.增删改查


CRUD相关操作,一个数据库最基本的作用就是增删改查了吧。C:create,R:read,U:update,D:delete但是具体的操作并不是这几个单词。

1.增:新增一个数据db.collection.insert(doc)

use school 然后db.grade.insert({name:"韩振方",age:"18"})db代表着当前数据库,grade是collection集合的名字,插入的就是我们的文档。

注意,这时候我们再查看db的数量,你会发现school出现在了上面。

image.png

再试试 show collections

image.png

同时插入多个对象,用数组[{},{}]的方式

image.png

插入一个或多个

image.png

和insert()功能一样,只是为了语义更加清晰。

2.查:查询数据 db.collection.find()

image.png

如果没有自己设定_id属性值,那么mongo会自动配置一个唯一的id值,且必须有下划线

提一嘴:你可能会想 那肯定有db.find(),collection.find(),我只能告诉你,show dbs show collections不会刚看就忘吧?还不赶快自己去敲一敲?

find(arguments)

find也可以接受参数,参数为一个对象,返回值是一个数组!注意,这个和js中的array.find()不一样,js的find是返回第一个符合条件的属性和值,返回的是一个键值对对象

image.png

在mongo中这个条件会查询所有name属性值是韩振方的,然后返回,即便结果只有一个文档符合条件,也需要用[index]来调用里面的属性,味道有点像document.getElementByClassName()document.querySelectorAll()。

image.png

`findOne()`这个查询方式返回值为健值对对象,可以直接调用里面的方法。类似于

document.querySelector()

3.改:确切的说是更新

db.grade.update()这个方法接受两个参数,一个是查询条件对象,一个是新的对象。注意,第二个是一个新的对象,并不是单一的属性。

image.png

我们正常的逻辑就是,如果这样使用,你就把name修改成小方就行了,其它别给我动。但是它实际上执行的是把name:“韩一一”这整个对象,替换成后面的对象。

image.png

那么如何到达我们实际上想要完成的目标呢?这里需要我们用到:“修改操作符” $set

image.png

比如我要修改第一个数据,把name改为:韩韩韩而其它数据不改变。

image.png

上面第一行代码,就是$set:{}的用法。和set相反的是$unset:{}代表着删除某一个文档对象里的某个属性。

补充:update()默认只会修改文档中第一个符合搜索条件的文档对象,$set:{}修饰符不仅仅只有修改的作用,如果查找的条件是name:"韩振方"并且$set:{grade:"3"},但是我并没有这条属性,那么set就会自动这个属性到这个文档对象上

拓建:ds.collection.updateManyds.collection.unpdateOne

4.删除 removedb.collection.remove()它接受一个文档的属性对象作为参数,它可以有第二个参数,我们先讲只有一个参数的默认情况。

image.png

现在我有两个name为xx的数据,我remove({name:"xx"})你先根据上面的增改查判断一些它是删除一个还是多个?

按照我们上面的逻辑,它肯定只是删除第一个!其实不然 它删除所有符合条件的。

image.png

如果只想要删除一个,有两种方法。

1.使用db.collection.deleteOne(),不要问为什么不是removeOne()我也在想!

2.或者给remove添加一个第二个参数remove({name:"xx"},ture)第二个参数是布尔值属性为onlyOne,

补充:还有db.collection.deleteMany()这个就是remove默认的情况。

如果remove({})传递一个空数组那么会把集合里所有文档删除,但是!!!注意,但是集合还在!内存中还有这个变量的位置,并且这种方法在底层运行逻辑是把文档对象一个一个删除,并不是一下子清空。

如果真的有需求,想要删除某个集合,那么建议直接db.collection.drop(),这样会把这个集合整个都删除掉,相当于内存中不存在这个变量了。

tips:删除数据库是没有db.drop()这个方法 有自己的专属方法.db.deleteDatabase(),db.colection.drop()在使用的时候,如果这个集合是该数据库最后一个,则默认清空内存中数据库的地址,相当于删除了整个数据库。


⚠️注意:

极度不推荐使用删除相关的方法,因为一个系统最重要的就是数据库中的数据,你甚至可以没有前端的页面,但是数据是我们需求的根,没有数据一切功能都没有什么意义。所以我们常常给某些不需要展示出来的数据 添加一个特殊的属性,比如说:isDelete :"true",在使用数据的时候,把这些数据给先筛除掉,使用剩下的数据即可!这些删除方法可是没有后悔药,使用前慎重考虑并且提前备份。







相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
7月前
|
存储 NoSQL 关系型数据库
【MongoDB系列笔记】索引
索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
57 1
|
7月前
|
存储 JSON NoSQL
【MongoDB系列相关笔记】常用命令
本文主要介绍了常见的MongoDB命令操作;结合某个案例需求,将数据库操作,集合操作,文档基本的CURD以及分页查询等命令进行详细说明。
217 0
|
7月前
|
NoSQL JavaScript Linux
【MongoDB系列相关笔记】单机部署
本文主要介绍了Windows和Linux系统中安装和启动MongoDB的步骤。
179 0
|
7月前
|
存储 NoSQL 关系型数据库
【MongoDB系列笔记】MongoDB相关概念
MongoDB 是一个开源、高性能、无模式的文档型数据库,常用于处理高并发、海量数据的场景,尤其适合社交、游戏、物流、物联网和视频直播等领域。与传统的关系型数据库相比,MongoDB 更适合存储结构较为灵活、数据量大且事务性要求不高的数据。当面临高读写需求、大规模数据存储和高可扩展性需求时,可以选择 MongoDB。MongoDB 支持类似于 JSON 的 BSON 数据格式,具有丰富的数据模型,如文档、集合和数据库,以及强大的查询和索引功能。此外,MongoDB 提供复制集以实现高可用性和水平扩展性,以适应业务发展和数据增长。
177 0
|
7月前
|
NoSQL Java MongoDB
MongoDB笔记
MongoDB笔记
54 0
|
运维 NoSQL MongoDB
[慕课笔记]mongodb入门篇
[慕课笔记]mongodb入门篇
68 1
|
前端开发 JavaScript NoSQL
[慕课笔记] node+mongodb建站攻略
[慕课笔记] node+mongodb建站攻略
59 0
|
NoSQL JavaScript MongoDB
MongoDB随手笔记(二)
MongoDB随手笔记(二)
MongoDB随手笔记(二)
|
存储 JSON NoSQL
mongodb笔记
mongodb笔记
425 0
|
4天前
|
存储 JSON NoSQL
学习 MongoDB:打开强大的数据库技术大门
MongoDB 是一个基于分布式文件存储的文档数据库,由 C++ 编写,旨在为 Web 应用提供可扩展的高性能数据存储解决方案。它与 MySQL 类似,但使用文档结构而非表结构。核心概念包括:数据库(Database)、集合(Collection)、文档(Document)和字段(Field)。MongoDB 使用 BSON 格式存储数据,支持多种数据类型,如字符串、整数、数组等,并通过二进制编码实现高效存储和传输。BSON 文档结构类似 JSON,但更紧凑,适合网络传输。
30 15