米拓企业网站管理系统,企业网站制作 厦门,网站模板asp,织梦网站开发个人公众号
整理mongodb文档(一):增
看前提示
本文主要用到的工具是mongodb的db管理工具-----mongo compass。 本文主要讲的是在上述工具中如何对db的增加的操作#xff0c;对应转化为mongose里面的语句我想应该不需要我帮忙了吧。。。
选用mongose的理由也很简单#xf…个人公众号
整理mongodb文档(一):增
看前提示
本文主要用到的工具是mongodb的db管理工具-----mongo compass。 本文主要讲的是在上述工具中如何对db的增加的操作对应转化为mongose里面的语句我想应该不需要我帮忙了吧。。。
选用mongose的理由也很简单当我们一行一行敲代码的时候很容易出错但是当你用工具的时候可以大大的将你的问题放在学习语法上当然我这里并不是单纯的使用ui的添加数据而是敲命令行来加数据。
nodejs怎么连接mongodb的我就不废话了
express的使用(五) 简单的使用mongodb
准备
开始前我们先准备一个很干净的库比如下面所示我创建了一个名字叫做test的库下面有一个名字叫做blog的集合接下来的操作都在这儿做了。
正题
顾名思义增就是往数据库指定集合里面增加数据当然分为多种情况一者是增加多个一者是增加单条就分别有了insertOne以及insertMany的两种api。 需要注意的是如果你使用这类语法去添加数据的时候如果你的collection的名字写错了。比如不小心从blog 写成了Blog那么他会创建一个名字叫做Blog的collection并且往里面加入数据所以写代码的时候一定要定义好schema来操作我们的db。
insertOne
顾名思义插入的是单条数据具体的语法如下
db.blog.insertOne({title:关于mongodb的博客})创建结果如下
没啥好说的在insertOne语句中我们插入了一个自己定义的对象而在这个对象中我们定义了一个字段然后执行了这个语句后在db中给我们插入了一个数据并且给我们的数据自动添加了一个_id。而且返回了我们插入的结果
insertMany
顾名思义插入的是多条数据具体语法如下
db.blog.insertMany([
{title:关于express的博客},
{title:关于react的博客},
{title:关于vue的博客}
])同样插入一个数组数据之后我们的db直接返回了一个插入的结果并且生成的数据都有一个_id.
insert
假设存在以下操蛋的行为一个由前端传过来的数据不确定是一个json或者是一个array则此时我们又觉得判断是否为数组然后分别调用insertOne以及insertMany太蠢了。我们就可以调用insert方法。由于方法不常用到我就只是贴一下代码不贴运行结果了。
#插入单条数据
db.blog.insert({title:关于mongodb的博客})
#插入多条数据
db.blog.insert([
{title:关于express的博客},
{title:关于react的博客},
{title:关于vue的博客}
])writeConcern
处理完了正餐我们就要处理下其他的参数了。比如提及到的writeConcern 简单来说。writeConcern决定一个写操作落在多少个节点上才算成功。怎么理解比如一个线上服务不可能说我们只有一台数据库的。因为数据出问题怎么办那就有了集群的概念。不过对于新手下面的知识只是给你做个扩展而已。我想新手也接触不到这一块的知识。 到了现在大家算是掌握了mongodb的insert的方法但也仅仅限制于添加了一条数据比如对于object_id以及如何添加一个createdtime之类的细节操作我们还没有好好的探究。但是上述问题如果也探究起来太长了。因为正题是writeConcern先让我们拿insertOne第二个参数来开刀吧。个insertOne做例子现在修改下我们的sql语句
db.blog.insertOne(
{title:关于mongodb的博客},
{writeConcern: { w :majority }}
)可以看到返回的结果基本没什么变化
翻看了下关于’majority’这一块的描述 上述文字大家基本都看到了’transaction‘这个字眼对于老手自然知道是关系到事务以及关系到了错误回滚的这一块所以后面在事务的篇章我会大概描述下但是新手理解这儿的意思是关系到数据的一致性比如看下下面的解释或许你会明白我在说什么直接解释集群概念对部分新手不友好因为大家都数据库的理解可能只是存储数据并没有考虑到数据丢失之类的。
顺带提一嘴很多人看到这个majority会觉得别人为什么都是用012这些数字而不是用这个那是因为 w: “majority” in MongoDB 5.0 and later, with differences for deployments containing arbiters. See Implicit Default Write Concern. w: 1 in MongoDB 4.4 and earlier. 后面的123代表的是节点数目。比如一个集群四个机子我们将所有的数据都拷贝到4台机子就是
{w:4}很明显我本地没有那么多机器而且普通的数据不需要这么夸张如果是用户的数据或则是交易数据等重要的数据我们可以使用majority代表的是拷贝到大多数的节点里面也就是一份数据大部分的节点都觉得存进去了那么才可以返回ok。至于性能问题后面涉及到的时候再跟大家说吧。
ordered
既然谈论完了insertOne的writeConcern接下来就从多条数据的插入错误问题来理解下ordered。先举个例子来看下
db.blog.insertMany(
[{title:关于express的博客,_id:1},
{title:关于react的博客,_id:1},
{title:关于vue的博客}
])其中两条数据的_id是一样的这样插入数据的时候必定有问题那么我们先这样子插入试试
果然报错了但是第一条数据也被插进去了但第二条数据因为错误中断了我们的插入操作导致无辜的第三条数据并没有被插入进去那么我们应该怎么让第三条数据不出现问题呢而ordered就排上用场了继续更改下sql
db.blog.insertMany(
[{title:关于express的博客,_id:1},
{title:关于react的博客,_id:1},
{title:关于vue的博客}
],
{ordered:false})上面的sql的改动就在于我们添加了一个ordered为false的设置项这样子除了第二条的重复_id数据我们的别的数据并没有被影响到从而实现了无序插入即别的数据操作的时候不会影响我们没问题的数据。
当然了默认的ordered是true也就是其中一条出了问题会中断插入导致影响到剩余的数据。 对于insert方法。其中也提供了ordered以及writeConcern的参数但是新手不怎么建议理解这个你最需要完成的任务是crud这样子你后面回过头来再看你的理解会更加深。
最后的废话
所有的文档都是来源于mongodb的官方文档对于其他的基本操作后续会慢慢补充。