MongoDB入门3——更新文档和修改器1
我们前面讲MongoDB的CRUD操作讲过:MongoDB的更新操作通过集合的update()函数实现。这个函数有两个参数:要更改的文档和更改后的样子。要更新文档有两种情况:更新文档和对文档某些部分更新。下面分别说说这两种情况:
1.更新整个文档
假设现在有下面的一个文档:
- {"name":"zhangsan","dad":"zhangyi","mom":"lisi"};
如果觉得这样不好,需要讲父亲和母亲的信息组织到一起,成为一个新的文档:parents,另外,加上一个年龄字段age.那么新的文档如下:
- {"name":"zhangsan","age":20,"parents":{dad:"zhangyi","mom":"lisi"}};
如果要将数据库中的第一个文档替代为上面第二个文档,使用update操作的过程如下:
- > var zhangsan = db.info.findOne({"name" : "zhangsan"});
- > zhangsan
- {
- "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"),
- "name" : "zhangsan",
- "dad" : "zhangyi",
- "mom" : "lisi"
- }
- > zhangsan.parents={"dad":zhangsan.dad,"mom":zhangsan.mom};
- { "dad" : "zhangyi", "mom" : "lisi" }
- > zhangsan
- {
- "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"),
- "name" : "zhangsan",
- "dad" : "zhangyi",
- "mom" : "lisi",
- "parents" : {
- "dad" : "zhangyi",
- "mom" : "lisi"
- }
- }
- > zhangsan.age=20
- 20
- > zhangsan
- {
- "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"),
- "name" : "zhangsan",
- "dad" : "zhangyi",
- "mom" : "lisi",
- "parents" : {
- "dad" : "zhangyi",
- "mom" : "lisi"
- },
- "age" : 20
- }
- > delete zhangsan.dad
- true
- > zhangsan
- {
- "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"),
- "name" : "zhangsan",
- "mom" : "lisi",
- "parents" : {
- "dad" : "zhangyi",
- "mom" : "lisi"
- },
- "age" : 20
- }
- > delete zhangsan.mom
- true
- > zhangsan
- {
- "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"),
- "name" : "zhangsan",
- "parents" : {
- "dad" : "zhangyi",
- "mom" : "lisi"
- },
- "age" : 20
- }
- > db.info.update({"_id" : ObjectId("4ee37409c3fc1a9f80ad74ed")},zhangsan);
- > db.info.find();
- { "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"), "name" : "zhangsan", "parents" : { "dad" : "zhangyi", "mom" : "lisi" }, "age" : 20 }
- >
以这种方式进行文档更新需要注意一点:尽量通过_id来匹配需要被替换的文档。至于为什么,我想用过数据库的人应该都能明白(类似于用主键去匹配特性的记录)。
2.使用修改器部分修改文档的一部分
a) $set修改器
$set修改器指定一个键的新值,若不存在则创建新的。我们要给上面的zhangsan文档(数据库中的)添加一个wife键值对。
- > db.info.update({"_id" : ObjectId("4ee37409c3fc1a9f80ad74ed")},{"$set":{"wife":"wangwu"}});
- > db.info.find();
- { "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"), "age" : 20, "name" : "zhangsan", "parents" : { "dad" : "zhangyi", "mom" : "lisi" }, "wife" : "wangwu" }
- >
现在过了一年,张三已经是21岁了,那么可以使用$set更新age键的值:
- > db.info.update({"_id" : ObjectId("4ee37409c3fc1a9f80ad74ed")},{"$set":{"age":21}});
- > db.info.find();
- { "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"), "age" : 21, "name" : "zhangsan", "parents" : { "dad" : "zhangyi", "mom" : "lisi" }, "wife" : "wangwu" }
- >
当然这种情况还有别的修改器可以实现,并且更合适,我们一会会继续介绍。
zhangsan离婚了,没老婆了,怎们办?我们可以通过$unset修改器来撤销wife这个键值对。(PS:这个例子不是很合适,太残酷了)
- > db.info.update({"_id" : ObjectId("4ee37409c3fc1a9f80ad74ed")},{"$unset":{"wife":1}});
- > db.info.find();
- { "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"), "age" : 21, "name" : "zhangsan", "parents" : { "dad" : "zhangyi", "mom" : "lisi" } }
- >
b)$inc修改器
$inc修改器增加和修改已有键的值(只适用于数字类型)。上面我们提到,随着时间推移,zhangsan的年龄会不断增大,就可以使用这个修改器:
- > db.info.update({"_id" : ObjectId("4ee37409c3fc1a9f80ad74ed")},{"$inc":{"age":1}});
- > db.info.find();
- { "_id" : ObjectId("4ee37409c3fc1a9f80ad74ed"), "age" : 22, "name" : "zhangsan", "parents" : { "dad" : "zhangyi", "mom" : "lisi" } }
- >
这个修改器非常适合那些投票、计分、访问量统计一类的情况。但是得注意,这个选择器只适用于对数字类型的键值对进行增加和减少。减少只需要传递负值就可以了。
转载于:https://blog.51cto.com/wawlian/738952
MongoDB入门3——更新文档和修改器1相关推荐
- 《MongoDB入门教程》第14篇 CRUD之更新文档
本篇我们将会介绍如何使用集合的 updateOne() 和 updateMany() 方法更新文档. updateOne() 方法 updateOne() 方法可以更新满足条件的单个文档,语法如下: ...
- MongoDB更新文档(非常详细,不要错过~)
下面是对MongoDB更新数据库的整理,希望可以帮助到有需要的小伙伴~ 文章目录 更新文档 更新单个文档 更新多个文档 更新文档 更新单个文档 语法: User.updateOne({查询条件},{要 ...
- MongoDB——文档操作(更新文档)
目录 一.更新文档命令的格式 二.更新操作符 三.更新单个文档 3.1.更新单个文档的示例 四.更新多个文档 4.1.更新多个文档的概述 4.2.更新多个文档的示例 五.使用upsert命令 5.1. ...
- mongodb更新文档
mongodb更新文档 方法一:直接修改 语法:db.集合名.update({条件},{新的文档}) db.php333.update({num:214},{num:1114444}); 注意:出现的 ...
- 开启MongoDB更新文档操作的正确姿势
将文档存入数据库中之后,可以使用以下几种更新方法之一对其进行更改:updateOne.updateMany 和 replaceOne.updateOne 和 updateMany 都将筛选文档作为第一 ...
- MongoDB(5)文档 CRUD 操作
MongoDB 入门专栏 http://blog.csdn.net/column/details/19681.html MongoDB 文档 CRUD 操作 查询文档 基本使用 mongodb 查询文 ...
- 魔坊APP项目-11-PyMongo、数据库连接,管理、集合管理、文档管理(添加文档、查询文档、删除文档、更新文档)
PyMongo 安装: pip install pymongo 一.数据库连接 数据库连接,无密码 from pymongo import MongoClient# 数据库链接,必须保证当前系统能正常 ...
- php solr 更新数据类型,Solr更新文档数据
使用XML更新文档 以下是用于更新现有文档中的字段的XML文件.将下面的内容保存在名称为update.xml的文件中. 001 Raj Malhotra 9000000000 Delhi 正如上面看到 ...
- Facebook 游戏开发更新文档 API 参考文档 v6.0
Facebook 游戏开发更新文档 API 参考文档 v6.0 更新日志 1.排行榜 此版本全新推出排行榜 API!提供一套强大的 API, 使得游戏可获取排行榜.查询得分 情况和设置新分数(支持分数 ...
- 【elasticsearch】如何部分更新文档 (partial update的使用)
文章目录 1.什么是partial update 1.1 全量修改文档的原理 1.2 修改指定field的思路 1.3 partial update的优势 1.4 partial update的使用 ...
最新文章
- vivado----fpga硬件调试 (七)----数据导出并用MATLAB读取
- nodejs入门教程之http的get和request简介及应用
- Linux中文档去掉windows文本的多余的回车符(^M)
- 无线路由器在手机上如何连接服务器,192.168.10.1路由器手机怎么设置? | 192路由网...
- 字节跳动学前端还是java_【全国】—Java/前端工程师—字节跳动
- 当使用 position 属性时,请始终设置 !DOCTYPE 声明:当使用 float 属性时,请始终设置 !DOCTYPE 声明:
- 苹果电脑删除linux系统软件,mac删除双系统_mac删除双系统的win
- 基于FPGA的CameraLink视频开发案例
- HCRM医院客户管理系统
- Android端实现下载抖音直播视频功能
- Vue3和Vue2的一些区别
- Python 他来了,他来了!
- EasyCVR添加萤石云SDK接入的设计与开发流程
- 联想笔记本进入pe_联想小新笔记本怎么进入bios设置U盘启动
- GIC spec之ITS和LPI中断3
- pdf 模版 汉字和数字_标准格式!田字格里如何写汉字和数字(强烈推荐收藏)...
- 用格里高利公式求给定精度的PI值 (15分)
- 1027: 伊顿公学进入名校人数第2题(2级)输入两个用空格分隔的整数m和n,分别表示某年的毕业生人数和该年度进入某名校的百分比。输出输出一个整数count,表示该年度进入该名校的学生人数
- vue实现带节假日的日历
- [含LW+辩论PPT+任务书+中期检查表+源码等]javaweb企业员工信息管理系统的设计与实现薪酬|请假|薪资|工资[包运行成功]计算机毕业设计Java项目
热门文章
- 计算机课初中文化的学生招,我是一名初中信息技术教师,有时候想在理论课上讲..._教师招聘考试_帮考网...
- sqli-labs-master sql注入靶场(10、11、12)
- Hive on Tez map阶段task划分源码分析(map task个数)
- 中创向心力:职业教育改革实施新方案
- android 界面设计基本知识Ⅲ
- 【软件周刊第 33 期】跳票 5 次的 Fedora 26 Beta 终发布 坐等正式版
- 【c语言】5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
- 【爆笑趣图】攻城狮面试合集
- Xcode9下自动化编译错误
- 基于word2vec与Word Mover Distance的文档相似度计算