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文件

相关推荐
刘大浪18 分钟前
后端数据增删改查基于Springboot+mybatis mysql 时间根据当时时间自动填充,数据库连接查询不一致,mysql数据库连接不好用
数据库·spring boot·mybatis
无敌岩雀25 分钟前
MySQL中的索引
数据库·mysql
a_安徒生1 小时前
linux安装TDengine
linux·数据库·tdengine
程序员学习随笔1 小时前
PostgreSQL技术内幕19:逻辑备份工具pg_dump、pg_dumpall
数据库·postgresql
尘浮生1 小时前
Java项目实战II基于微信小程序的校运会管理系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
偶尔。5351 小时前
什么是事务?事务有哪些特性?
数据库·oracle
安迁岚1 小时前
【SQL Server】华中农业大学空间数据库实验报告 实验六 视图
数据库·sql·mysql·oracle·实验报告
xoxo-Rachel2 小时前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
JH30732 小时前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介2 小时前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis