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

相关推荐
Ai 编码助手1 小时前
MySQL中distinct与group by之间的性能进行比较
数据库·mysql
陈燚_重生之又为程序员1 小时前
基于梧桐数据库的实时数据分析解决方案
数据库·数据挖掘·数据分析
caridle1 小时前
教程:使用 InterBase Express 访问数据库(五):TIBTransaction
java·数据库·express
白云如幻1 小时前
MySQL排序查询
数据库·mysql
萧鼎1 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
^velpro^1 小时前
数据库连接池的创建
java·开发语言·数据库
荒川之神1 小时前
ORACLE _11G_R2_ASM 常用命令
数据库·oracle
IT培训中心-竺老师2 小时前
Oracle 23AI创建示例库
数据库·oracle
小白学大数据2 小时前
JavaScript重定向对网络爬虫的影响及处理
开发语言·javascript·数据库·爬虫
time never ceases2 小时前
使用docker方式进行Oracle数据库的物理迁移(helowin/oracle_11g)
数据库·docker·oracle