IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mongo 详解修改操作 -> 正文阅读

[大数据]mongo 详解修改操作

根据查询条件,更新这边也有些细节需要注意,所以在这里准备更新下细节,方便以后自己使用。

mongodb原生


db.<collection>.updateOne(filter, update, [options]); 
db.<collection>.updateMany(filter, update, [options]); 
复制代码

filter 过滤条件

filter 是查询的过滤条件,详情请查看上一篇文章:mongo 进阶——查询

options 更新的内容

更新的以下内容是基于以下数据结构来的:

image.png

options 第二个参数决定了更新哪些字段,它的常见写法如下:

普通字段操作

$set 操作符

这个操作符号是用来设置单个字段的

// 将匹配文档的 name 设置为 邓哥,address.city 设置为 哈尔滨
{
  $set: { name:"twinkle", "address.province": "北京" }
}

// 例如: 
db.getCollection('students').updateOne({_id:  ObjectId("6187c759ee4ea6f22d01f45a")},{$set:{name:"twinkle", "address.province": "北京" }})
复制代码

image.png

$inc

$inc 用来设置某个字段自增多少

// 将匹配文档的 name 设置为 twinkle2,并将其年龄增加2
{
  $set: { name:"twinkle2" },
  $inc: { age: 2 }
}

// 例如:
db.getCollection('students').updateOne({_id:  ObjectId("6187c759ee4ea6f22d01f45a")},{
  $set: { name:"twinkle2" },
  $inc: { age: 2 }
})
复制代码

image.png

$mul

用来设置某个字段自乘多少

// 将匹配文档的 name 设置为 twinkle,并将其年龄乘以2
{
  $set: { name:"twinkle" },
  $mul: { age: 2 }
}
// 这个和简单,和上面加一样的
复制代码

$rename

将文档的某个字段从新名命,这个在mysql中可不存在哦


// 将匹配文档的 name 字段修改为 fullname
{
  $rename: { name: "fullname" }
}

// 例如:
db.getCollection('students').updateOne({_id:  ObjectId("6187c759ee4ea6f22d01f45a")},{
 $rename: { name: "fullname" }
})
复制代码

image.png

$unset

将文档的某个字段删除

// 将匹配文档的 age 字段、address.province 字段 删除
{
  $unset: {age:"", "address.province":""}
}

例如:
db.getCollection('students').updateOne({_id:  ObjectId("6187c759ee4ea6f22d01f45a")},{
  $unset: {age:"", "address.province":""}
})
复制代码

image.png

数组操作

在mongo中的数组操作是不同的,会有专门的指令来进行修改.

$addToSet

若数组中不存在则进行添加 若存在则不进行任何操作

// 向 loves 添加一项:code
{
  $addToSet: {
    loves: "code"
  }
}

// 例如
db.getCollection('students').updateOne({_id:  ObjectId("6187c759ee4ea6f22d01f45a")},{
 $addToSet: {
    loves: "code"
  }
})
复制代码

image.png

$push

向数组中添加一项数据,无论数组中是否存在,都必定会添加


{
  $push: {
    loves: "code"
  }
}
// 这个和上面是一样的,都是添加
复制代码

$each

在数组中添加多项

{
  $push: {
    loves: { $each: ["game", "game2"]}
  }
}
// 例如
db.getCollection('students').updateOne({_id:  ObjectId("6187c759ee4ea6f22d01f45a")},{
  $push: {
    loves: { $each: ["game", "game2"]}
  }
})
复制代码

image.png

$pull

删除数组的某一项或者多项

// 删除loves的code,game
{
  $pull: {
    loves: {$in: ["code","game"]}
  }
}

// 例如:
db.getCollection('students').updateOne({_id:  ObjectId("6187c759ee4ea6f22d01f45a")},{
   $pull: {
    loves: {$in: ["code","game"]}
  }
})
复制代码

image.png

.$

修改数组中某项


// 将所有loves中的 game2 修改为 game
// 该操作符需要配合查询条件使用
db.students.updateOne({
   _id:  ObjectId("6187c759ee4ea6f22d01f45a")
  loves: "game2"
}, {
  $set: {
    "loves.$": "game"
  }
})
复制代码

image.png

更多的操作符见:docs.mongodb.com/manual/refe…

其他配置

第三个参数是其他配置

  • upsert:默认false,若无法找到匹配项,则进行添加
// 我把id的a改成c,数据库中是没有的
db.students.updateOne({
   _id:  ObjectId("6187c759ee4ea6f22d01f45c"),
}, {
  $set: {
    "loves": "game"
  }
},{
upsert: true
})
复制代码

image.png

mongoose

方式1:直接使用函数进行更新

<Model>.updateOne(filter, doc, [options]);
<Model>.updateMany(filter, doc, [options]);
复制代码

方式2:在模型实例中进行更新,然后保存

const u = await Students.findById("6187c759ee4ea6f22d01f45c");
u.address.province = "北京";
u.happys.push("game", "code");
await u.save(); // 此时会自动对比新旧文档,完成更新
复制代码

这种方式与原生的区别:

  • _id可以直接使用字符串进行匹配
  • doc中可以省略$set,直接更改即可(可以直接用js的代码来进行修改)
  • 默认情况下,不会触发验证,需要在模型的options中设置runValidators: true开启验证
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:28:04  更:2021-11-10 12:29:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:49:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码