2.5.4 MongoDB -- 更新和删除

  • 整体更新
  • 更新字段
  • 字段操作
  • 数组操作
  • 删除

https://docs.mongodb.com/manual/reference/operator/update/

  • updateOne
  • updateMany
  • replaceOne

整体更新

db.questions.replaceOne({},{})

更新字段

db.author.updateOne({"name":"mingson"},
{
$set: {"age": 20},
$inc: {"view", -2}
}
)

字段操作

Name Description
$currentDate 设置为当前时间
$inc 原子级增减操作
$min 当传入的值比数据库中的值小时才更新
$max 当传入的值比数据库中的值大时才更新
$mul 原子级相乘
$rename 重命名字段
$set 设置字段值
$setOnInsert 仅当
$unset 移除字段
db.questions.updateOne({"tags": {$in: ["c#"]}},
{
$inc: {"view": NumberInt(-2)},
$set: {"title": "第一个问题updated"}
}
)

数组操作

Name Description
$ 更新数组的第一个元素
$[] 更新数组的所有元素
array.[index] 更新指定下标元素
$addToSet 添加元素到数组(当元素不存在于原来的数组当中)
$pop 移除第一个或者最后一个元素
$pull 移除符合条件的数组元素
$pullAll 移除指定元素
$push 添加到最后
$each 添加多个元素
$position 指定插入的位置
$slice 对数据切割
$sort 对数组排序
$[] 更新指定条件的元素
// 把第一个包含 test2 的数组的元素改为 test3,即把数组元素里面第一个 test2 改为 test3,而不是数组的第一个元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$set: {"tags.$": "test3"}}) // 更新所有元素,所有 test2 更新为 test3
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$set: {"tags.$[]": "test3"}}) // 更新指定下标元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$set: {"tags.2": "c#"}}) // 添加元素到数组(当元素不存在于原来的数组当中)
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$addToSet: {"tags": "c#"}}) // 移除第一个
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$pop: {"tags": -1}}) // 移除最后一个元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$pop: {"tags": 1}}) // 移除符合条件的数组元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$pull: {"tags": {$in: ["c#"]}}}) // 移除指定元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$pullAll: {"tags": ["test3", "asp.net core"]}) // 添加到最后
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$push: {"tags": "test3"}) // 添加多个元素
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$each: {"tags": ["c#", "test3"]}) // 指定插入的位置
db.questions.updateOne({"tags": {$in: ["test2"]}}, {$push: {"tags": {$each: ["c#", "test3"], $position: 0}}) // 对数据切割,对数组排序
db.students.update(
{ _id: 5 },
{
$push: {
quizzes: {
$each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ],
$sort: { score: -1 },
$slice: 3
}
}
}
) // 更新指定条件的元素,把 answers 中 content 为 回答一 的设置为 回答
db.questions.updateOne({"tags": {$in: ["test2"]}}, {set: {"answers.$[elem].content": "回答", {"arrayFilters": [{"elem.content": "回答一"}]}}})

删除

https://docs.mongodb.com/manual/tutorial/remove-documents/

db.inventory.deleteOne( { status: "D" } )

db.inventory.deleteMany({ status : "A" })

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 更新和删除)--学习笔记的更多相关文章

  1. .NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记

    目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...

  2. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记

    2.5.7 MongoDB -- API实现 问题查询单个实现 问题查询列表实现 问题跨集合查询实现 问题创建实现 问题更新实现 问题回答实现 问题评论实现 问题投票实现 回答实现 QuestionC ...

  3. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记

    2.5.8 MongoDB -- API重构 Lighter.Domain Lighter.Application.Contract Lighter.Application LighterApi Li ...

  4. .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

    目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...

  5. .NET 云原生架构师训练营(建立系统观)--学习笔记

    目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...

  6. .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记

    目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...

  7. .NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记

    2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...

  8. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记

    2.5.1 MongoDB -- 介绍 mysql vs mongo 快速开始 mysql vs mongo 对比 mysql mongo 数据存储 table 二维表结构,需要预先定义结构 json ...

  9. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记

    2.5.6 MongoDB -- 问答系统 MongoDB 数据库设计 API 实现概述 MongoDB 数据库设计 设计优化 内嵌(mongo)还是引用(mysql) 数据一致性 范式:将数据分散到 ...

随机推荐

  1. AtomicInteger的addAndGet(int delta)与getAndAdd(int delta)有什么区别?

    结论:区别仅在于返回的结果,修改的值是相同的,但是返回的值不同. 看一下源码注释 1 /** 2 * Atomically adds the given value to the current va ...

  2. Monkey的使用

    1.进入adb shell 环境 在Windows环境下进入DOS界面,输入adb shell 注意:adb shell服务使用的端口是5037,如果此端口被其他进程占用时,将不能正常启动adb sh ...

  3. SELECT 1,2,3...的含义及其在SQL注入中的用法

    首先,select 之后可以接一串数字:1,2,3-只是一个例子,这串数字并不一定要按从小到大排列,也不一定从1开始,这串数字的值和顺序是任意的,甚至可以是重复的,如:11,465,7461,35 或 ...

  4. 【转载—“光荣之路”公众号】Bug预防体系(上千bug分析后总结的最佳实践)

    web常见产品问题及预防 测试人员在每次版本迭代中,会对项目的整体质量有一个把控,对于项目常见的问题,开发经常犯的错误都会有所了解,为了避免或者减少这样的错误或不规范的事情再发生,测试人员可以整理构建 ...

  5. Java基础学习之基础概念与环境搭建(1)

    1.Java基础概念 1.1.Java语言的特点 Java语言是简单易学的 Java语言是面向对象(封装.继承和多态) Java语言是平台无关的(一次编译,到处运行) Java语言是可靠的.安全的(异 ...

  6. C# 继承类的值赋

    C# 继承类的值赋 /// <summary> /// 将父类的值赋值到子类中 /// </summary> /// <typeparam name="TPar ...

  7. Acwing 393. 雇佣收银员

    算法1: 差分约束 + 枚举 O(Tn2028) 由于牵扯到 \([i - 8 + 1, i]\) 这段区间的和的约束,所以用前缀和更好表达一些. 设 \(num[i]\)表示 \(i\) 时刻有多少 ...

  8. STL——容器(deque) 元素的存取&迭代器

    1. deque 的数据存取 这个部分和 vector 几乎一样 第一  使用下标操作 dequeName[0] = 100; //小心越界 第二  使用at 方法 如: dequeName.at(2 ...

  9. S3C2440从NAND Flash启动和NOR FLASH启动的问题

    1.为什么NAND FLASH不能直接运行程序     NAND FLASH本身是连接到了控制器上而不是系统总线上.CPU运行机制为:CPU启动后是要取指令执行的,如果是SROM.NOR FLASH ...

  10. Typora+图床详解(小白都能学得会)

    Typora+图床详解(小白都能学得会) 1 了解工作 博客中用的笔记软件--Typora(Markdown语法) 博客中用的图床--阿里云对象存储(Object Storage Service,简称 ...