前端博主,热衷各种前端向的骚操作,经常想到哪就写到哪,如果有感兴趣的技术和前端效果可以留言~博主看到后会去代替大家踩坑的~
主页: oliver尹的主页
格言: 跌倒了爬起来就好~
来个关注吧,点个赞吧,谢谢
本篇记录备份的是Mongo DB的一些基础知识,包括文档长什么样子,Mongo Shell中的CRUD这四种基本操作,什么是CRUD?C(Creadt、创建)R(Read、读取)U(Update、更新)D(Delete、删除),人话就是增、删、改、查等等;
注意,本文中的示例命令都是基于Mongo Shell的,并不是直接运行在类似于node代码中的~
本文主要分享的内容是什么是文档主键,以及如何通过insertOne(),insertMany(),insert(),save()命令创建文档,具体内容如下:
MongoDB中每一个文档都有一个自己独一无二的主键,这个和传统的关系型数据库没有区别,当然,在不设定的情况下文档的主键是MongoDB自动生成的,这种默认主键也是我们日常开发中最常用的,称作为 对象主键 也就是 ObjectId,看个例子,大概就是长这个样子:
{
_id: new ObjectId("620327ed5a4fe9fe824daa24"),
username: "demo"
}
第一个问题来了,这个文档主键有什么用?
new ObjectId("620327ed5a4fe9fe824daa24").getTimestamp()
以node为例,我们假设这个admin就是最终查询到的数据,那么我们只需要这么写即可
admin._id.getTimestamp()
最终会得到一个类似于这种值的结果
2022-02-09T02:33:17.000Z
也就是说正常情况下,其实我们没有必要存储当前这条数据的录入时间,这个录入时间完全可以通过ObjectId来获取,当然,这个也是需要根据写的时候的实际情况来看的~
在某些场景下,可能会说我需要 将ObjectId转成字符串,那么可以通过如下方式获取
new ObjectId("620327ed5a4fe9fe824daa24").valueOf()
以node为例,我们假设这个admin就是最终查询到的数据,那么我们只需要这么写即可
admin._id.valueOf()
最终会得到一个类似于这种值的结果
620327ed5a4fe9fe824daa24
在Mongo Shell中通过命令 use 切换数据库,比如
use test
得到结果如下
这代表在当前的Mongo Shell中已经切换到数据库test了,如果不存在test数据库,那么会创建一个名为test的数据库并且切换到test数据库;
使用 show collections 可以查看当前数据库中的数据
show collections
如果提示:Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus,代表权限不够,需要首先登陆
创建单个文档,具体模版如下:
db.<collection>.inserOne(
<document>,
{
writeConcern:<document>
}
)
以上方的这个模版为例,看一个具体的示例:
db.test.insertOne({
name:"oliver",
age:18,
})
简单说明:在test这个集合中写入了一条数据,这条数据有两个字段,分别是 name 和 age,值分别为oliver 和 18;注意的是,在保存数据的时候,MongoDB会自动帮我们生成一个 主键_id 添加进我们待存储的这个文档一起存进test;
创建多个文档,举个例子,假设现在前端传递了一组数据,共10条道后端,如果使用insertOne,那么我们需要执行10次,肯定不合理,因此需要一次性存储10条进集合,模版如下:
db.<collection>insertMany(
[<document1>,<document2>,...,<document10>],
{
writeConcern:<document>,
ordered:<bnoolean>
}
)
db.test.insertMany([
{
name:"oliver",
age:18,
},{
name:"oliver1",
age:19,
}
])
值得注意的是,在顺序写入的状态下,一旦发生错误,那么后续的数据将会被终止写入,在报错信息中,我们可以通过 nInserted这个字段观察最终写入的结果,存在几篇文档写入成功
如图所示,0,代表在顺序写入的情况下,第一篇就报错了,或者打乱顺序的情况下,所有数据都没有写入成功~
创建单个或者多个文档,简单的说就是 **insertOne **和 **insertMany **的集合;
db.<collection>insertMany(
<document or array of document>,
{
writeConcern:<document>,
ordered:<bnoolean>
}
)
具体示例如下
// 多个
db.test.insert([
{
name:"oliver",
age:18,
},{
name:"oliver1",
age:19,
}
])
// 单个
db.test.insert({
name:"oliver",
age:18,
})
用法就是 insertOne 和 insertMany 的用法;
这个方法也是用来创建文档的,基本用法如下:
db.<collection>.save(
<document>,
{
writeConcern:<document>
}
)
这个命令它 本身是调用insert这个方法,db.collection.save()和db.collection.insert()在某种程度上可以是为完全相同,因此不多做介绍了~
本文主要记录了什么是文档主键,以及在常规数据库操作中文档创建的一些用法~在日常开发中文档创建用的最多的还是 db.collection.insert() 毕竟它既可以创建单个文档,也可以添加多个文档,当然具体还是根据自己的习惯与喜好进行选择~