.NET 云原生架构师训练营(模块二 基础巩固 MongoDB 更新和删除)--学习笔记
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 更新和删除)--学习笔记的更多相关文章
- .NET 云原生架构师训练营(权限系统 代码实现 Store.EntityFramework)--学习笔记
		
目录 开发任务 代码实现 开发任务 DotNetNB.Security.Core:定义 core,models,Istore:实现 default memory store DotNetNB.Secu ...
 - .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API实现)--学习笔记
		
2.5.7 MongoDB -- API实现 问题查询单个实现 问题查询列表实现 问题跨集合查询实现 问题创建实现 问题更新实现 问题回答实现 问题评论实现 问题投票实现 回答实现 QuestionC ...
 - .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
		
2.5.8 MongoDB -- API重构 Lighter.Domain Lighter.Application.Contract Lighter.Application LighterApi Li ...
 - .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记
		
目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...
 - .NET 云原生架构师训练营(建立系统观)--学习笔记
		
目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...
 - .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记
		
目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...
 - .NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记
		
2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...
 - .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记
		
2.5.1 MongoDB -- 介绍 mysql vs mongo 快速开始 mysql vs mongo 对比 mysql mongo 数据存储 table 二维表结构,需要预先定义结构 json ...
 - .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记
		
2.5.6 MongoDB -- 问答系统 MongoDB 数据库设计 API 实现概述 MongoDB 数据库设计 设计优化 内嵌(mongo)还是引用(mysql) 数据一致性 范式:将数据分散到 ...
 
随机推荐
- AtomicInteger的addAndGet(int delta)与getAndAdd(int delta)有什么区别?
			
结论:区别仅在于返回的结果,修改的值是相同的,但是返回的值不同. 看一下源码注释 1 /** 2 * Atomically adds the given value to the current va ...
 - Monkey的使用
			
1.进入adb shell 环境 在Windows环境下进入DOS界面,输入adb shell 注意:adb shell服务使用的端口是5037,如果此端口被其他进程占用时,将不能正常启动adb sh ...
 - SELECT 1,2,3...的含义及其在SQL注入中的用法
			
首先,select 之后可以接一串数字:1,2,3-只是一个例子,这串数字并不一定要按从小到大排列,也不一定从1开始,这串数字的值和顺序是任意的,甚至可以是重复的,如:11,465,7461,35 或 ...
 - 【转载—“光荣之路”公众号】Bug预防体系(上千bug分析后总结的最佳实践)
			
web常见产品问题及预防 测试人员在每次版本迭代中,会对项目的整体质量有一个把控,对于项目常见的问题,开发经常犯的错误都会有所了解,为了避免或者减少这样的错误或不规范的事情再发生,测试人员可以整理构建 ...
 - Java基础学习之基础概念与环境搭建(1)
			
1.Java基础概念 1.1.Java语言的特点 Java语言是简单易学的 Java语言是面向对象(封装.继承和多态) Java语言是平台无关的(一次编译,到处运行) Java语言是可靠的.安全的(异 ...
 - C# 继承类的值赋
			
C# 继承类的值赋 /// <summary> /// 将父类的值赋值到子类中 /// </summary> /// <typeparam name="TPar ...
 - Acwing 393. 雇佣收银员
			
算法1: 差分约束 + 枚举 O(Tn2028) 由于牵扯到 \([i - 8 + 1, i]\) 这段区间的和的约束,所以用前缀和更好表达一些. 设 \(num[i]\)表示 \(i\) 时刻有多少 ...
 - STL——容器(deque) 元素的存取&迭代器
			
1. deque 的数据存取 这个部分和 vector 几乎一样 第一 使用下标操作 dequeName[0] = 100; //小心越界 第二 使用at 方法 如: dequeName.at(2 ...
 - S3C2440从NAND Flash启动和NOR FLASH启动的问题
			
1.为什么NAND FLASH不能直接运行程序 NAND FLASH本身是连接到了控制器上而不是系统总线上.CPU运行机制为:CPU启动后是要取指令执行的,如果是SROM.NOR FLASH ...
 - Typora+图床详解(小白都能学得会)
			
Typora+图床详解(小白都能学得会) 1 了解工作 博客中用的笔记软件--Typora(Markdown语法) 博客中用的图床--阿里云对象存储(Object Storage Service,简称 ...