• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

mongodb文档:改

武飞扬头像
mkmin
帮助2

个人博客

整理mongodb文档:改
求关注,求批评,求进步

文章概叙

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

数据准备

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

db.test.insertMany([
    { string: 'a', number: 1 },
    { string: 'A', number: 1 }
])

updateOne

Updates a single document within the collection based on the filter.
顾名思义,在过滤筛选的结果上更新单个文档,示例代码如下

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.
顾名思义,在过滤筛选的结果上更新所有的文档,老规矩,先来一个例子作为讲解。

db.test.updateMany(
    { number: 1 },
    { $set: { string: 'a1', number: 1 } },
    { upsert: true }
)

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

学新通

update

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

默认情况下,update用于更新单个文档,如果需要更新多个文档,需要用到multi选项。
下面是一个简单的实例,只是让大家看下这个语法怎么用而已,毕竟已经是一个废弃的API了。

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

学新通

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

update

update是指我们要更新的操作,最简单的例子就是使用$set。update的操作有两种类型,下面先介绍如何使用更新运算符操作。
更新运算符有三种类型,最常用的是数组以及字段的更新运算符,下面会拿字段的更新运算符做个例子,先抄录表格如下:
学新通

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

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的解释是:如果没有找到文档时候是否创建。下面用一个简单的例子来说明

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操作,最后将数据整合成为自己想要的模型,在更新操作中,聚合管道有下面几个阶段。

$addFields
$set
$project
$unset
$replaceRoot
$replaceWith

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

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

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

学新通

最后的点

至此,关于update的几个主要的点,讲解完毕,对于新手我不建议现在去看聚合管道,所以没马上讲,我的建议是先看完增删改查。
最后,你觉得上单锐雯怎么玩呢?来个大佬。。。。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhhibiif
系列文章
更多 icon
同类精品
更多 icon
继续加载