mongo 详解修改操作

mongo 详解修改操作根据查询条件 更新这边也有些细节需要注意 所以在这里准备更新下细节 方便以后自己使用 mongodb 原生 db collection updateOne filter update options db collection

大家好,欢迎来到IT知识分享网。

根据查询条件,更新这边也有些细节需要注意,所以在这里准备更新下细节,方便以后自己使用。

mongodb原生

 db.<collection>.updateOne(filter, update, [options]); db.<collection>.updateMany(filter, update, [options]); 复制代码

filter 过滤条件

filter 是查询的过滤条件,详情请查看上一篇文章:mongo 进阶——查询

options 更新的内容

更新的以下内容是基于以下数据结构来的:

mongo 详解修改操作

options 第二个参数决定了更新哪些字段,它的常见写法如下:

普通字段操作

$set 操作符

这个操作符号是用来设置单个字段的

// 将匹配文档的 name 设置为 邓哥,address.city 设置为 哈尔滨 { $set: { name:"twinkle", "address.province": "北京" } } // 例如: db.getCollection('students').updateOne({_id: ObjectId("6187c759ee4ea6f22d01f45a")},{$set:{name:"twinkle", "address.province": "北京" }}) 复制代码
mongo 详解修改操作

$inc

$inc 用来设置某个字段自增多少

// 将匹配文档的 name 设置为 twinkle2,并将其年龄增加2 { $set: { name:"twinkle2" }, $inc: { age: 2 } } // 例如: db.getCollection('students').updateOne({_id: ObjectId("6187c759ee4ea6f22d01f45a")},{ $set: { name:"twinkle2" }, $inc: { age: 2 } }) 复制代码
mongo 详解修改操作

$mul

用来设置某个字段自乘多少

// 将匹配文档的 name 设置为 twinkle,并将其年龄乘以2 { $set: { name:"twinkle" }, $mul: { age: 2 } } // 这个和简单,和上面加一样的 复制代码

$rename

将文档的某个字段从新名命,这个在mysql中可不存在哦

 // 将匹配文档的 name 字段修改为 fullname { $rename: { name: "fullname" } } // 例如: db.getCollection('students').updateOne({_id: ObjectId("6187c759ee4ea6f22d01f45a")},{ $rename: { name: "fullname" } }) 复制代码
mongo 详解修改操作

$unset

将文档的某个字段删除

// 将匹配文档的 age 字段、address.province 字段 删除 { $unset: {age:"", "address.province":""} } 例如: db.getCollection('students').updateOne({_id: ObjectId("6187c759ee4ea6f22d01f45a")},{ $unset: {age:"", "address.province":""} }) 复制代码
mongo 详解修改操作

数组操作

在mongo中的数组操作是不同的,会有专门的指令来进行修改.

$addToSet

若数组中不存在则进行添加 若存在则不进行任何操作

// 向 loves 添加一项:code { $addToSet: { loves: "code" } } // 例如 db.getCollection('students').updateOne({_id: ObjectId("6187c759ee4ea6f22d01f45a")},{ $addToSet: { loves: "code" } }) 复制代码
mongo 详解修改操作

$push

向数组中添加一项数据,无论数组中是否存在,都必定会添加

 { $push: { loves: "code" } } // 这个和上面是一样的,都是添加 复制代码

$each

在数组中添加多项

{ $push: { loves: { $each: ["game", "game2"]} } } // 例如 db.getCollection('students').updateOne({_id: ObjectId("6187c759ee4ea6f22d01f45a")},{ $push: { loves: { $each: ["game", "game2"]} } }) 复制代码
mongo 详解修改操作

$pull

删除数组的某一项或者多项

// 删除loves的code,game { $pull: { loves: {$in: ["code","game"]} } } // 例如: db.getCollection('students').updateOne({_id: ObjectId("6187c759ee4ea6f22d01f45a")},{ $pull: { loves: {$in: ["code","game"]} } }) 复制代码
mongo 详解修改操作

.$

修改数组中某项

 // 将所有loves中的 game2 修改为 game // 该操作符需要配合查询条件使用 db.students.updateOne({ _id: ObjectId("6187c759ee4ea6f22d01f45a") loves: "game2" }, { $set: { "loves.#34;: "game" } }) 复制代码
mongo 详解修改操作

更多的操作符见:docs.mongodb.com/manual/refe…

其他配置

第三个参数是其他配置

  • upsert:默认false,若无法找到匹配项,则进行添加
// 我把id的a改成c,数据库中是没有的 db.students.updateOne({ _id: ObjectId("6187c759ee4ea6f22d01f45c"), }, { $set: { "loves": "game" } },{ upsert: true }) 复制代码
mongo 详解修改操作

mongoose

方式1:直接使用函数进行更新

<Model>.updateOne(filter, doc, [options]); <Model>.updateMany(filter, doc, [options]); 复制代码

方式2:在模型实例中进行更新,然后保存

const u = await Students.findById("6187c759ee4ea6f22d01f45c"); u.address.province = "北京"; u.happys.push("game", "code"); await u.save(); // 此时会自动对比新旧文档,完成更新 复制代码

这种方式与原生的区别:

  • _id可以直接使用字符串进行匹配
  • doc中可以省略$set,直接更改即可(可以直接用js的代码来进行修改)
  • 默认情况下,不会触发验证,需要在模型的options中设置runValidators: true开启验证

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/93539.html

(0)
上一篇 2024-10-26 08:15
下一篇 2024-10-26 10:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信