博客
关于我
MongoDB 文档字段增删改
阅读量:797 次
发布时间:2023-02-09

本文共 3618 字,大约阅读时间需要 12 分钟。

MongoDB 是一个基于 CRUD 操作的文档存储系统,能够对集合中的文档进行增删改查。集合上的字段增删改可以通过多种方式实现,包括使用 setunset 修改器,或者通过文档替换的方式。本文将详细介绍集合上字段的增删改,以及基于选项 upsert 的更新操作。


a. 语法描述

db.collection.update() 方法的语法格式如下:

db.collection.update(  
, // 查询或过滤条件
, // 修改器(被修改键及内容) { upsert:
, // true 表示匹配不到文档则创建新文档 multi:
, // true 表示更新所有匹配文档 writeConcern:
// 确定写关注类型,用于强一致性或弱一致性 })

b. 使用 $set 修改器修改年龄字段

以下命令可以通过 update 方法修改文档中 年龄 字段:

db.chenji.update({ name: "李旭" }, { $set: { 年龄: 24 } })

执行后,查询结果如下:

db.chenji.find({ $or: [{ name: "李旭" }] }).pretty()
{  "_id": ObjectId("59987eee7cd6cda607043cd1"),  "name": "李旭",  "年纪": "三年级",  "年龄": 24}

c. 文档新增字段($set 实现)

以下命令可以在文档中添加新字段:

db.chenji.update({ name: "李旭" }, { $set: { add: "性别" } })

执行后,查询结果如下:

db.chenji.find({ $or: [{ name: "李旭" }] }).pretty()
{  "_id": ObjectId("59987eee7cd6cda607043cd1"),  "name": "李旭",  "年纪": "三年级",  "年龄": 24,  "add": "性别"}

d. 文档删除字段

字段的删除可以通过 unset 修改器实现:

db.chenji.update({ name: "李旭" }, { $unset: { add: 1 } })

执行后,查询结果如下:

db.chenji.find({ $or: [{ name: "李旭" }] }).pretty()
{  "_id": ObjectId("59987eee7cd6cda607043cd1"),  "name": "李旭",  "年纪": "三年级",  "年龄": 24}

e. 字段值的增加或减少($inc 修改器)

$inc 修改器用于对数值字段进行增减操作。若字段不存在,会自动创建该字段;若字段存在,则在原值基础上操作。

db.chenji.update({ name: "李旭" }, { $inc: { num: 100 } })

执行后,查询结果如下:

db.chenji.find({ $or: [{ name: "李旭" }] }).pretty()
{  "_id": ObjectId("59987eee7cd6cda607043cd1"),  "name": "李旭",  "年纪": "三年级",  "年龄": 24,  "num": 100}

再次执行相同操作:

db.chenji.update({ name: "李旭" }, { $inc: { num: 101 } })

查询结果如下:

db.chenji.find({ $or: [{ name: "李旭" }] }).pretty()
{  "_id": ObjectId("59987eee7cd6cda607043cd1"),  "name": "李旭",  "年纪": "三年级",  "年龄": 24,  "num": 201}

f. 时间戳字段的增加及自动更新($currentDate)

$currentDate 修改器用于自动更新文档的时间戳字段。以下命令可以同时增加字段值和更新时间戳:

db.chenji.update({ name: "李旭" }, { $inc: { num: 60 }, $currentDate: { lastModified: true } })

执行后,查询结果如下:

db.chenji.find({ $or: [{ name: "李旭" }] }).pretty()
{  "_id": ObjectId("59987eee7cd6cda607043cd1"),  "name": "李旭",  "年纪": "三年级",  "年龄": 24,  "num": 231,  "lastModified": ISODate("2017-08-20T08:39:53.601Z")}

g. 文档字段重命名($rename)

$rename 修改器用于重命名文档字段。以下命令可以将 name 字段重命名为 ename

db.chenji.update({ name: "李旭" }, { $rename: { name: "ename" } })

执行后,查询结果如下:

db.chenji.find({ $or: [{ name: "李旭" }] }).pretty()
{  "_id": ObjectId("59987eee7cd6cda607043cd1"),  "age": 9,  "年级": "一年级",  "num": 231,  "lastModified": ISODate("2017-08-20T08:39:53.601Z"),  "ename": "李旭"}

h. 对整个集合上所有文档字段进行重命名($rename)

以下命令可以将所有文档中的 name 字段重命名为 ename

db.chenji.update({}, { $rename: { name: "ename" } }, { multi: true })

执行后,查询结果如下:

db.chenji.find().pretty()
{  "_id": ObjectId("59990ec402730a37fe1ee79e"),  "年纪": "二年级",  "年龄": "12",  "ename": "建伟"}
{  "_id": ObjectId("59987eee7cd6cda607043cd1"),  "age": 9,  "年级": "一年级",  "num": 231,  "lastModified": ISODate("2017-08-20T08:39:53.601Z"),  "ename": "李旭"}
{  "_id": ObjectId("5998860a7cd6cda607043cd2"),  "年纪": "三年级",  "年龄": "14",  "ename": "张三"}
{  "_id": ObjectId("599886227cd6cda607043cd3"),  "年纪": "四年级",  "年龄": "16",  "ename": "王三"}
{  "_id": ObjectId("599886357cd6cda607043cd4"),  "年纪": "一年级",  "年龄": "8",  "ename": "王七"}
{  "_id": ObjectId("599886537cd6cda607043cd5"),  "年纪": "一年级",  "年龄": "9",  "ename": "张巴"}
{  "_id": ObjectId("5998866e7cd6cda607043cd6"),  "年纪": "七年级",  "年龄": "16",  "ename": "谢娜"}

i. upsert 选项用法

upsert 选项的作用类似于 Oracle 的 merge into 或 MySQL 的 replace into。当 upsert: true 时,若集合中匹配到满足条件的文档,则更新文档内容;否则,创建新文档。默认值为 false


小结

  • 对文档上数据的修改有多种方式,常用的为 $set$inc 修改器。
  • $inc 是一种高效的数据修改器,通常用于实现数值的增加或减少,仅支持数字类型。
  • 对文档字段的增加、删除,可以通过 $set$unset$inc 等方式实现。
  • upsert 选项可以实现“匹配则更新,不匹配则插入”的功能。

转载地址:http://hcffk.baihongyu.com/

你可能感兴趣的文章
mac elasticsearch brew安装填坑
查看>>
mac M1 下安装docker 及相关镜像
查看>>
Mac M1 芯片不兼容node-sass
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
Mac OS下错误The superclass “javax.servlet.http.HttpServlet“ was not found on the Java Build Path的解决方法
查看>>
mac 搭建APK反编译环境[转]
查看>>
MAC 显示隐藏文件
查看>>
mac 虚拟机安装oracle 11g,MAC+Vmware Fusion安装Oracle11g RAC
查看>>
mac-gradle的安装和配置
查看>>
macaca 测试web(2)
查看>>
MacBook黑屏/白屏开不了机?一文搞定所有可能的解决方案!
查看>>
macOS系统上安装JDK
查看>>
MacType Decency 项目常见问题解决方案
查看>>
Mac电脑怎么读写不了移动硬盘?解决苹果电脑不能读写移动硬盘问题
查看>>
malloc和定位new表达式
查看>>
MAMP无法正常启动,错误提示The built-in Apache is active
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>