MongoDB基础知识

​ 文档是mongodb中的最初单元,类似于mysql中的行,集合可以看做一个具有动态模式的表,mongodb可以拥有多个互相独立的数据库,每个数据库,都拥有自己的集合;每一个文档都有一个特殊的健:"_id",这个健在文档所在的集合中是独一无二的;mongodb自带了一个功能强大的shell,可以用于管理mongodb。

一、文档

文档是键值对的一个有序集,{"hgq":"123","tzy":"123"}与{"tzy":"123","hgq":"123"}是完全不同的两个文档;

文档严格区分大小写,还需分类型,{"tzy":"1234","tzy":123},前者代表字符串,后者代表数字;

在文档中,不能有重复的键,{"tzy":"1234","tzy":"123"}是不合法的

二、集合

集合就是一组文档,如果将文档比喻成mysql中的行,集合相当于一张表

1、动态模式

一个集合里面的文档可以是各种个样的,可以没有固定的格式。

为什么使用多个集合?

  • 方便管理,进行分类
  • 查询速度快
  • 数据会更加集中
  • 方便常见索引

2、命名

不能包涵\0字符串,这字符表示集合名称结束

不能以"system."开头,这个是为系统集合保留的,比如system.users保存的是用户的信息,system.namespaces保存所有集合的信息

3、子集合

推荐使用子集合,组织数据更加高效。

例如博客系统,子集合blog.posts和blog.authors,为了使组织结构更加清晰,这里的blog集合甚至都不需要存在,blog集合和子集合没有什么关系。

三、数据库

在mongoDB中,多个文档组成集合,多个集合可以组成数据库。一个mongoDB可以有多个库,每个库都有独立的权限,即使在磁盘中,不同的数据库也放置在不同的文件中,在文件中,数据库名对应着目录的文件名,相关命名规则也保持和文件命名规则相同。

默认数据库

  1. admin:如果将用户添加到admin数据库,则默认获得所有数据库的权限,一切特定的命令必须在admin数据库运行,比如列出所有数据库或者关闭服务器。
  2. local:此数据库不可复制,所有的本地集合被存在这个数据库中。
  3. config:分片相关配置存放在此数据库中。

四、mongodb shell简介

登录mongodb

mongo mongodb://<my ip>:27017

1、shell中的基本操作

默认会进入test数据库,可以通过db命令查看

>db
test

查看所有数据库

>show dbs;

切换数据库

>use admin;
1、创建
#定义post
>post ={"name":"hgq","age":18,"class":"4"}
{ "name" : "hgq", "age" : 18, "class" : "4" }

#将post插入到foo集合中
>db.foo.insert(post)
WriteResult({ "nInserted" : 1 })

#查看foo集合
>db.foo.find()
{ "_id" : ObjectId("667106f462f6c8bf0225adbd"), "name" : "hgq", "age" : 18, "class" : "4" }

可以看到输入的键值被完整记录,还有一个额外添加的键值"_id"

2、读取

find和findOne都可以查看集群中的文档,find默认会返回20个文档,findOne只会返回一个文档。后面会详细介绍查询

3、更新

使用update进行更新数据,update至少需要两个参数,第一个是限定条件,用于匹配待更新的文档,第二个是新文档。

>post.comments=[]
#插入post
>db.foo.update({class:"4"},post)
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
#查看foo集合
>db.foo.find()
{ "_id" : ObjectId("667106f462f6c8bf0225adbd"), "name" : "hgq", "age" : 18, "class" : "4", "comments" : [ ] }
4、删除

通过remove进行删除,删除匹配的文档

> db.foo.remove({"class":"4"})
#查看foo集合
>db.foo.find()

五、数据类型

1、基本数据类型

一共有6种基本的数据类型:nul l、布尔、数字、字符串、数组、对象

null:表示空值或者不存在的字段

布尔型:true、false

数值:包括整型和浮点型

字符串:UTF-8都支持

日期:日期被存储为新纪元以来的毫秒数

{"s""new Data()}

数组:

{""}

内嵌文档

{"2":{"11":"33"}}

对象id

{ "_id" : ObjectId("666a6e7e97a427d1d07460b5") }

/Public/极无双2/极2包/对外测试/HMT公测/1.20.X/win/1.20.602

2、日期

日期:日期被存储为新纪元以来的毫秒数,并未存储对应时区

{"s""new Data()}

3、数组

数组是一组值,可以作为有序对象,也能作为无序对象来操作。

{"hgq":["xx",11]}

数组中可以包含不同类型的数据,可以对数组进行查询和修改

4、内嵌文档

示例如下,可以更加直观的显示层级信息

{"2":{"11":"33"}}

5、_id和ObjectID

每一个文档必须有一个_id键,默认是一个ObjectId对象,在一个集合里面,每个对象都有一个唯一的id,确保集合中的文档被唯一标识,会自动生成。

六、使用mongodb shell

++.mongorc.js文件存在于每个用户家目录下++

通过修改.mongorc.js文件来移除比较危险的命令,也就是重写内置的函数

cat .mongorc.js 

var no=function(){
print("注意⚠️,线上数据库,切勿执行删除操作!!!")
};
//禁止删除数据库
db.dropDatabase=DB.prototype.dropDatabase = no ;
//禁止删除集合
DBCollection.prototype.drop = no ;
//禁止删除索引
DBCollection.prototype.dropIndex = no ;

显示效果

> db.dropDatabase()
注意⚠️,线上数据库,切勿执行删除操作!!!

此操作并不能保护数据库收到恶意攻击,只能防止自己人手误。

在启动时添加"--norc"参数,就可以禁止加载.mongorc.js文件

相关推荐
cyt涛1 小时前
MyBatis 学习总结
数据库·sql·学习·mysql·mybatis·jdbc·lombok
Rookie也要加油2 小时前
01_SQLite
数据库·sqlite
liuxin334455662 小时前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
看山还是山,看水还是。2 小时前
MySQL 管理
数据库·笔记·mysql·adb
fishmemory7sec3 小时前
Koa2项目实战2(路由管理、项目结构优化)
数据库·mongodb·koa
momo小菜pa3 小时前
【MySQL 09】表的内外连接
数据库·mysql
Jasonakeke3 小时前
【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化
数据库·mysql
程序猿小D3 小时前
第二百六十九节 JPA教程 - JPA查询OrderBy两个属性示例
java·开发语言·数据库·windows·jpa
小宇成长录3 小时前
Mysql:数据库和表增删查改基本语句
数据库·mysql·数据库备份
团儿.4 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构