整理mongodb文档(一):增

个人公众号

整理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,会觉得别人为什么都是用0,1,2这些数字,而不是用这个,那是因为

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.

后面的1,2,3代表的是节点数目。比如一个集群四个机子,我们将所有的数据都拷贝到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的官方文档,对于其他的基本操作,后续会慢慢补充。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15527.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个监控系统的典型架构

监控系统的典型架构图,从左往右看,采集器是负责采集监控数据的,采集到数据之后传输给服务端,通常是直接写入时序库。然后就是对时序库的数据进行分析和可视化,分析部分最典型的就是告警规则判断,即图上的告…

Java阶段五Day14

Java阶段五Day14 文章目录 Java阶段五Day14分布式事务整合demo案例中架构,代码关系发送半消息本地事务完成检查补偿购物车消费 鲁班周边环境调整前端启动介绍启动前端 直接启动的项目gateway(网关)login(登录注册)atta…

网络请求fetch

fetch()是 XMLHttpRequest 的升级版,用于在 JavaScript 脚本里面发出 HTTP 请求。浏览器原生提供这个对象 fetch()的功能与 XMLHttpRequest 基本相同,但有三个主要的差异。 与 Ajax 类似,Fetch 也是前后端通信的一种方式。Fetch 要比 Ajax …

React Flow

// 创建项目 npm create vitelatest my-react-flow-app -- --template react // 安装插件 npm install reactflow npm install antd // 运行项目 npm run dev 1、App.jsx import { useCallback, useState } from react; import ReactFlow, {addEdge,ReactFlowProvider,MiniMap…

享元模式——实现对象的复用

1、简介 1.1、概述 当一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题。例如,在一个文本字符串中存在很多重复的字符,如果每个字符都用一个单独的对象来表示,将会占用较多的内存…

39.手机导航

手机导航 html部分 <div class"phone"><div class"content"><img class"active" src"./static/20180529205331_yhGyf.jpeg" alt"" srcset""><img src"./static/20190214214253_hsjqw…

【CNN-BiLSTM-attention】基于高斯混合模型聚类的风电场短期功率预测方法(Pythonmatlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

测试|自动化测试(了解)

测试|自动化测试&#xff08;了解&#xff09; 1.什么是自动化测试☆☆☆☆ 自动化测试相当于把人工测试手段进行转换&#xff0c;让代码执行。 2.自动化测试的分类☆☆☆☆ 注&#xff1a;这里只是常见的自动化测试&#xff0c;并不全部罗列。 1.单元自动化测试 其中Java…

嵌入式硬件系统的基本组成

嵌入式硬件系统的基本组成 嵌入式系统的硬件是以包含嵌入式微处理器的SOC为核心&#xff0c;主要由SOC、总线、存储器、输入/输出接口和设备组成。 嵌入式微处理器 每个嵌入式系统至少包含一个嵌入式微处理器 嵌入式微处理器体系结构可采用冯.诺依曼&#xff08;Von Neumann&…

前后端分离实现博客系统

文章目录 博客系统前言1. 前端1.1 登陆页面1.2 博客列表页面1.3 博客详情页面1.4 博客编辑页面 2. 后端2.1 项目部署2.1.1 创建maven项目2.1.2 引入依赖2.1.3 创建目录结构2.1.4 部署程序 2.2 逻辑设计2.2.1 数据库设计2.2.2 实体类设计2.2.3 Dao层设计2.2.3.1 BlogDao 2.2.4 D…

qt添加图标

1.添加资源 选择QtWidgetsApp.qrc文件打开 添加图标文件路径 添加图标文件 2.按钮添加图标 图标路径为:/res/res/swicth.jpg &#xff08;1&#xff09;代码设置图标 ui.pushButton_OPen->setIcon(QIcon(":/res/res/swicth.jpg")); &#xff08;2&#xff09;属…

apple pencil到底值不值得买?好用的iPad电容笔

随着ipad平板型号版本的不断更新&#xff0c;其的功能越来越多&#xff0c;现在它的性能已经可以和笔记本电脑相媲美了。而现在&#xff0c;随着技术的进步&#xff0c;IPAD已经不再是单纯的娱乐&#xff0c;而是一种功能强大的学习、绘画、工作等等。要增加生产效率&#xff0…

【数据结构与算法】归并排序

归并排序 归并排序&#xff08;MERGE-SORT&#xff09;是利用归并的思想实现的排序方法&#xff0c;该算法采用经典的分治&#xff08;divide-and-conquer&#xff09;策略&#xff08;分治法将问题分&#xff08;divide&#xff09;成一些小的问题然后递归求解&#xff0c;而…

stm32内存杂记

从上图中可以看出SRAM空间用来存放&#xff1a;1.各个文件中声明和定义的全局变量、静态数据和常量&#xff1b;2.未初始化的全局变量&#xff1b;3.HEAP区&#xff1b;4.STACK区 这是在.map文件中&#xff0c;双击工程target打开 堆栈是处于以0x2000xx地址处的 EQU伪代码&…

学C的第三十一天【通讯录的实现】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十天【自定义类型&#xff1a;结构体、枚举、联合】_高高的胖子的博客-CSDN博客 通讯录需求&#xff1a; 实现一个通讯录&#xff0c; 通讯录中存放保存人的信息&#xff1…

华为鸿蒙4本周发布:官方海报大有玄机!告别“人工智障”!

一年一度的华为开发者大会2023(HDC.Together)将于8月4日至8月6日在东莞松山湖举办。相比去年&#xff0c;今年的华为开发者大会足足提前了三个月&#xff0c;而本次大会主角之一无疑是全新国产操作系统鸿蒙4&#xff08;HarmonyOS 4&#xff09;。 官方之前用了三个词来形容鸿蒙…

C#文件操作从入门到精通(1)——INI文件操作

点击这里:微软官方文档查看writePrivateProfileString函数定义 常见错误: 1、中文路径写入失败,为啥? 2、文件不是全路径,只有文件名也会写入失败: 3、GetLastError怎么使用? GetLastError错误代码含义: (0)-操作成功完成。 (1)-功能错误。 (2)- 系统找不到指定的文件…

3个命令定位CPU飙高

top 指令找出消耗CPU最厉害的那个进程的pid top -H -p 进程pid 找出耗用CPU资源最多的线程pid printf ‘0x%x\n’ 线程pid 将线程pid转换为16进制 结合jstack 找出哪个代码有问题 jstack 进程pid | grep 16进制的线程pid -A 多少行日志 jstack 进程pid | grep 16进制的线程…

C语言指针进阶-1

本篇文章带来 1. 字符指针 2. 数组指针 3. 指针数组的相关知识详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作的动力之源&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&#xff01;&#…

04 http连接处理(上)

基础知识&#xff1a;epoll、http报文格式、状态码和有限状态机 代码&#xff1a;对服务端处理http请求的全部流程进行简要介绍&#xff0c;然后结合代码对http类及请求接收进行详细分析。 epoll epoll_create函数 #include <sys/epoll.h> int epoll_create(int size)…