整理mongodb文档:改

个人博客

整理mongodb文档:改

求关注,求批评,求进步

文章概叙

本文主要讲的是mongodb的updateOne以及updateMany,主要还是在shell下进行操作,也讲解下主要的参数upsert以及更新的参数。

数据准备

本次需要准备的数据不是很多,就两条就可以了

javascript 复制代码
db.test.insertMany([
    { string: 'a', number: 1 },
    { string: 'A', number: 1 }
])

updateOne

Updates a single document within the collection based on the filter.

顾名思义,在过滤筛选的结果上更新单个文档,示例代码如下

javascript 复制代码
db.test.updateOne(
    { string: 'a' },
    { $set: { string: 'a1', number: 1 } },
    { upsert: true }
)

这儿传入了三个参数,第一个是我们的filter,也就是过滤条件,而我们操作的数据就是根据这个过滤条件查询出来的,如果返回的数据有多条,则只操作第一条。

第二个参数是更新操作,$set代表的是设置值,属于更新运算符的范畴,具体可以看下面链接,理解更多的操作符。

Update Operators --- MongoDB Manual

第三个参数是配置项,最经常用到的是upsert以及collation,文章下面也会讲到,这儿只是大概讲解该api的结构。

最终,更改后的结果如下,可以看到已经将原来的a更改为了a1.

updateMany

Updates all documents that match the specified filter for a collection.

顾名思义,在过滤筛选的结果上更新所有的文档,老规矩,先来一个例子作为讲解。

javascript 复制代码
db.test.updateMany(
    { number: 1 },
    { $set: { string: 'a1', number: 1 } },
    { upsert: true }
)

对于该API的参数,也跟上面的updateOne差不多,只是更新的是查询出来的全部数据。

update

需要注意的是,该api在5.0之后就不建议使用了,就废弃了。

默认情况下,update用于更新单个文档,如果需要更新多个文档,需要用到multi选项。

下面是一个简单的实例,只是让大家看下这个语法怎么用而已,毕竟已经是一个废弃的API了。

javascript 复制代码
db.test.update(
    { number: 1 },
    { $set: { string: 'a1', number: 1 } },
    { upsert: true ,multi:true}
)

介绍完了三个最主要的API的用法,接下来用updateMany作为例子,讲下几个主要的参数。

update

update是指我们要更新的操作,最简单的例子就是使用$set。update的操作有两种类型,下面先介绍如何使用更新运算符操作。

更新运算符有三种类型,最常用的是数组以及字段的更新运算符,下面会拿字段的更新运算符做个例子,先抄录​表格如下:

set之前已经试过了,现在试试currentDate来给一个字段赋值当前的时间。

javascript 复制代码
db.test.updateMany(
    { number: 1 },
    { $currentDate: { lastModified: true } },
    { upsert: true, multi: true }
)

​其他的用法再看文档的实例,用起来不会有什么难度。

upsert

Creates a new document if no documents match the . For more details see filterupsert behavior.

​文档中对于upsert的解释是:如果没有找到文档时候是否创建。下面用一个简单的例子来说明

javascript 复制代码
db.test.updateMany(
    { number: 2 },
    { $currentDate: { lastModified: true } },
    { upsert: true, multi: true }
)

可以看到, 当我们运行语句的时候,upsert为true,则表示没有找到number为2的数据的情况下,mongodb帮我们创建了一条数据。相同,如果​upsert为false,则不会创建。

collation

之前有专门的博客讲解过这个参数,就不专门再说了,collation影响的是查数据出来的顺序
整理mongodb文档:collation

聚合管道

聚合管道可以理解为一堆数据,先通过a操作,然后再通过b操作,最后将数据整合成为自己想要的模型,在更新操作中,聚合管道有下面几个阶段。​

javascript 复制代码
$addFields
$set
$project
$unset
$replaceRoot
$replaceWith

这儿我会通过一个简单的例子让大家了解下如何使用聚合管道,而关于具体的聚合管道,后续会写个博客介绍,本文章最主要是让大家对这几个api有了解,不会很一脸茫然。​

举个例子,下面的代码会将我们之前的number等于2的数据删除掉lastModified字段,增加string字段

javascript 复制代码
db.test.updateMany(
    { number: 2 },
    [
        { "$project": { "lastModified": 0 } },
        { "$set": { string: 'a2' } }
    ],
    { upsert: true }
)

最后的点

至此,关于update的几个主要的点,讲解完毕,对于新手我不建议现在去看聚合管道,所以没​马上讲,我的建议是先看完增删改查。

最后,你觉得上单锐雯怎么玩呢?​来个大佬。。。。

相关推荐
摇滚侠1 小时前
《On Java 中文版 基础卷》阅读笔记 实现隐藏 12
java·数据库·笔记
川石课堂软件测试2 小时前
学习软件测试需掌握的一些知识
数据库·python·sql·功能测试·网络协议·mysql·http
2501_937767163 小时前
自建 SQL 数据库定时备份踩坑复盘与落地思路
数据库·sql
silvamux_4 小时前
10款模型写种草笔记:可发布性、返工来源与成本数据缺口复盘
java·数据库·笔记
I Am a robert girl6 小时前
从 GameHorizon 拆解多时间尺度游戏评测:数据管线、离线基准与在线回放的三层设计
数据库·游戏·多时间尺度·数据管线·游戏评测·离线基准·在线回放
躺柒6 小时前
读数据安全架构设计与实践17安全架构案例(下)
数据库·安全·零信任·安全架构·防火墙·无边界
SelectDB6 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB7 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB7 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
pjj198549 小时前
ClickHouse 与 Doris 数据库技术梳理:看懂分析型数据库
数据库·clickhouse