整理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,一经查实,立即删除!

相关文章

iOS开发-使用网络特殊字体下载CGFontRef

iOS开发-使用网络特殊字体下载CoreText 在开发中遇到需要将字体下载后再显示的情况,这种特殊字体下载后才能正常。 一、字体下载器 在AFNetworking中添加 pod Reachability字体下载器使用AFNetworking实现将字体文件下载 代码如下 #import "SDFontDownloa…

一个监控系统的典型架构

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

算法leetcode|65. 有效数字(rust重拳出击)

文章目录 65. 有效数字:样例 1:样例 2:样例 3:提示: 分析:题解:rust:go:c:python:java: 65. 有效数字: 有效数字&#xf…

数字转义汉字数字显示的简单研究

最近有个需求,需要显示汉字数字,比如一二三四五…这样子,问题看起来挺简单,但我没有找到有自带这样的转换的方法,数字转汉字数字,挺有意思的,就简单研究了一下; 百度了一下&#xff…

Java阶段五Day14

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

网络请求fetch

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

JavaScript---环境对象this

环境对象:指的是 函数 内部特殊的变量 this,它代表着当前函数运行时所处的环境。每个函数都有环境对象this。函数调用的方式不同,this指代的对象不同。 普通函数里面this指向的是window谁调用,this就指向谁(是判断thi…

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

hive的metastore问题汇总

1. metastore内存飙升 1 问题 metastore内存飙升降不下来; spark集群提交的任务无法运行, 只申请到了dirver的资源; 2 原因 当Spark任务无法获取足够资源时,因为任务无法继续进行,不能将元数据从Metastore返回给任务 后,这些元数据暂存在…

39.手机导航

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

【leetcode】7.29记录

题目考察内容思路踩坑剑指Offer 05.替换空格(easy)字符串创建StringBuffer&#xff0c;用charAt获取每个字符并判断&#xff0c;用sb.append©添加字符&#xff0c;最后返回sb.toString()541.反转字符串 II (easy)字符串针对每种情况直接实现就行string.substring(start,en…

【hive 运维】hive注释/数据支持中文

文章目录 一. 设置mysql中的hive库二. hive-site.xml 设置三. 测试 hive支持中文需要关注两个方面&#xff1a; 设置hive 元数据库中的一些表设置hive-site.xml. 一. 设置mysql中的hive库 use hivedb; alter table TBLS modify column TBL_NAME varchar(1000) character se…

TCP socket编程

一、服务端代码 #encoding utf -8 #导入socket库 from socket import * #等待客户端来连接&#xff0c;主机地址为0.0.0.0表示绑定本机所有网络接口ip地址 IP 0.0.0.0 #端口号 PORT 50000 #定义一次从socket缓存区最多读入512个字节数据 BUFLEN 512 #实例化一个socket编程…

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

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

比较常见CPU的区别:Intel、ARM、AMD

一、开发公司不同 1、Intel&#xff1a;是英特尔公司开发的中央处理器&#xff0c;有移动、台式、服务器三个系列。 2、ARM&#xff1a;是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。 3、AMD&#xff1a;由AMD公司生产的处理器。 二、技术不同 1、Intel&…

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

测试|自动化测试&#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;属…