0
点赞
收藏
分享

微信扫一扫

MongoDB之基本概念和操作


一、MongoDB概念解析

SQL术语/概念

MongoDB术语/概念

解释/说明

database

database

数据库

table

collectioin

数据库表/集合

row

document

数据记录行/文档

column

field

数据字段/域

index

index

索引

table join

表连接

primary key

primary key

主键MongoDB自动将_id字段设置为主键

二、MongoDB数据类型

类型

描述

类型

描述

String

字符串

Integer

整数数值

Boolean

布尔值

Double

双精度浮点型

Min/Max keys

相当于最大值和最小值

Array

数组

Timestamp

时间戳

Object

内嵌文档

Null

用于创建空值

Symbol

符号,一般用于特殊符号

Date

日期时间

Object ID

对象ID

Binary Data

二进制数据

Code

代码类型

Regular expression

正则表达式

我们需要重点关注下:Object ID

ObjectId相当于唯一主键,可以很快的去生成和排序,包含12Bytes

MongoDB之基本概念和操作_json

含义分别是:

  • 前4个字节表示创建unix时间戳比北京时间晚8小时
  • 接着三个是机器标识码
  • 接着是进程ID
  • 最后三个字节是随机数

三、数据库的操作

3.1. 查看连接数据库

查看所有的数据库

> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

admin: 相当于"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
**config:**当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

查看当前的数据库对象或者集合

> db
test

连接到指定的数据库

> use local
switched to db local
> db
local

3.2. 创建数据库

创建数据库和上面 ​​use​​ 命令一样:

> use long_test
switched to db long_test
> db
long_test
> show dbs
admin 0.000GB
api_manager 0.002GB
config 0.000GB
local 0.000GB
yert 0.000GB

使用use命令创建数据库,如果数据库不存在,则创建数据库,否则切换到指定数据库。并且创建数据数据之后使用 ​​show dbs​​ 查看所有数据库的时候是没法看见的。需要我们插入一些数据之后才能可以看到数据库信息。

> db.one.insert({"name": "long", "age": 11111})
WriteResult({ "nInserted" : 1 })
> show dbs
admin 0.000GB
api_manager 0.002GB
config 0.000GB
local 0.000GB
long_test 0.000GB
yert 0.000GB
>

注意 :MongoDB默认的数据库是test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

3.3. 删除数据库

如果我们需要删除刚才创建的数据库,可以切换到你要删除的数据库,使用 ​​db.dorpDatabase()​​ 进行删除。

> show dbs
admin 0.000GB
api_manager 0.002GB
config 0.000GB
local 0.000GB
long_test 0.000GB
yert 0.000GB
> use long_test
switched to db long_test
> db.dropDatabase()
{ "dropped" : "long_test", "ok" : 1 }
> show dbs
admin 0.000GB
api_manager 0.002GB
config 0.000GB
local 0.000GB
yert 0.000GB

四、集合操作

4.1. 创建集合

创建集合(创建表)可以使用 ​​db.createCollection(name, options)​​​ 。但是在MongoDB中,不需要创建集合。当插入一些文件 MongoDB 自动创建的集合。
那些个参数还是需要看一下:

字段

类型

描述

capped

Boolean

设置为true,则集合为有限制大小的集合,达到最大限额会覆盖最早的数据

autoIndexId

Boolean

设置为true,会自动创建索引_id字段,默认值是false,4.0版本之后不可设置

size

number

设置最大的字节,如果设置apped为true的时候需要设置

max

number

最大的数据量

更多的参数可以看一个官方文档:​​https://mongodb.net.cn/manual/reference/method/db.createCollection/#db.createCollection​​ 下面看一下例子:

> use long_test
switched to db long_test
> db.createCollection("name_list") # 创建集合
{ "ok" : 1 }
> show collections
name_list
> db.createCollection("age_list", {capped: true, size: 65536, max: 10000})
{ "ok" : 1 }
> show tables
age_list
name_list
> show collections
age_list
name_list

4.2. 查看集合

可以通过 ​​show tables​​​ 或者 ​​show collections​​ 查看数据库下面的集合

> show tables
age_list
name_list
> show collections
age_list
name_list

4.3. 删除集合

删除集合通过 ​​db.collection_name.drop()​​ 进行删除

> use long_test
switched to db long_test
> show tables
age_list
name_list
> db.name_list.drop()
true
> show tables
age_list

五、集合验证器

在创建索引的时候我们可以指定集合的验证器,当我们去更新或者插入的就行判断时候允许操作。
在上面的4.1中我们介绍了一部分创建集合的 ​​​option​​ 参数,其实还有一部分参数没有介绍,其中和验证器相关的参数如下:

属性名

类型

描述

取值范围

validator

Json串

验证规则或者表达式

验证器选项是给文档指定验证规则或表达式。

可以使用任何查询操作来指定表达式, 除了​​$near​​​,​​$nearSphere, $text,$where​​。

validationLevel

字符串

该选项确定MongoDB在更新过程中对验证规则对现有文档应用的严格程度

off:不验证插入和更新

strict:默认键验证规则应用于所有插入和更新

moderate:将验证规则应用于现有有效文档的插入和更新。不要将规则应用于现有无效文档的更新

validationAction

字符串

该选项确定MongoDB是应该 ​​error​​​还是拒绝违反验证规则的文档或 ​​warn​​有关日志中违反但允许无效文档的文档

error:默认文档必须在写入之前通过验证,否则写入失败

warn:文档不必通过验证。如果文档验证失败,则写操作将记录验证失败。

5.1. 什么是 ​​$jsonSchema​

简单来说 ​​JsonScheme​​​ 是为了验证 ​​Json​​​ 数据格式的,就和我们写接口的时候的请求参数的验证, ​​MongoDB​​​ 基于文档的数据库,所以 ​​Json Sechema​​​ 我们也需要先有一个了解。
先看一个例子:​​​http://json-schema.org/learn/getting-started-step-by-step.html​​ (官方文档)

{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"title": "Product",
"description": "A product in the catalog",
"type": "object",
"properties": {
"name": { "type": "string" },
"email": { "type": "string" },
"age": {
"type": "integer",
"minimum": 0,
"exclusiveMinimum": false,
},
"telephone": {
"type": "string",
"pattern": "^(\\([0-9]{3}\\))?[0-9]{3}-[0-9]{4}$"
}
},
"required": ["name", "email"],
"additionalProperties": false
}

很简单我们可以从中了解到这个 ​​json​​ 文件的规范是这样的:

  • object类型
  • 有是四个属性
  • name:
  • 类型为string
  • email:
  • 类型为string
  • age:
  • 类型是整数
  • 这个证书需要大于0
  • telephone:
  • 类型为string
  • 需要符合正则表达式
  • 四个属性必须包含name和email,剩下的是可选的
  • 除了这四个属性外,不允许出现其他属性

如果需要深入了解可以查看:​​https://json-schema.org/understanding-json-schema/index.html​​

5.2. MongoDB的json模式指定验证规则

有了上面的铺垫,我们看一下MongoDB如何指定Json规则,先看一个例子:

db.createCollection("students", {
validator: {
$jsonSchema: {
required: [ "name", "major", "gpa", "address" ],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
address: {
bsonType: "object",
required: [ "zipcode" ],
properties: {
"street": { bsonType: "string" },
"zipcode": { bsonType: "string" }
}
}
}
}
},
validationLevel: "moderate",
validationAction: "error"
})

这个例子的规则是:

  • 验证器:
  • 需要出现【name, major, gpa, address】四个属性
  • 属性规则:
  • name:
  • 类型:string
  • 描述:must be a string and is required
  • address:
  • 类型:object
  • 需要存在的属性:【zipcode】
  • 属性:
  • streat:
  • 类型:string
  • zipcode:
  • 类型:string
  • 验证严格度:
  • 将验证规则应用于现有有效文档的插入和更新。不要将规则应用于现有无效文档的更新
  • 数据写入控制:
  • 验证不过不允许写入

接着我们写入一些数据:

> db.students.insert({"name": "张三", "major": "未知", "gpa": false, "address": {"streat": "123456", "zipcode": "123456"}})
WriteResult({ "nInserted" : 1 })
> db.students.insert({"name": "张三", "major": "未知", "address": {"streat": "123456", "zipcode": "123456"}})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})

但丢失必要属性就会不允许写入

5.3. 表达式验证

Mongodb还支持另外一种关于表达式的验证器

db.createCollection( "contacts",
{ validator: { $or:
[
{ phone: { $type: "string" } },
{ email: { $regex: /@mongodb\.com$/ } },
{ status: { $in: [ "Unknown", "Incomplete" ] } }
]
}
})

这个就不多做解析了。


举报

相关推荐

0 条评论