博客
关于我
MongoDB 文档字段增删改
阅读量:793 次
发布时间: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/

你可能感兴趣的文章
MegaCli查看RIAD相关信息
查看>>
MEGER sentence in oracle
查看>>
Meikade开源项目常见问题解决方案
查看>>
Member var and Static var.
查看>>
Membership学习(二)membership入门[xgluxv]
查看>>
Memcache 查看列出所有key方法
查看>>
memcached——分布式内存对象缓存系统
查看>>
memcached分布式部署
查看>>
Memcached对象缓存详解
查看>>
Memcached常用操作
查看>>
memcached的LRU删除机制
查看>>
memcached缓存服务器的安装
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记002---telnet操作memcached
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>
memcache与memcached的区别
查看>>
MemCache在win7上的可视化配置以及Nodejs/Net应用
查看>>
memcache实现php会话保持
查看>>