mongodb 插入/更新/删除 文档
插入文档
db.collection.insertOne() 用于向集合插入一个新文档,如下:
1 | db.movies.insertOne({ "title" : "Stand by Me" }) |
db.collection.insertMany() 用于向集合插入一个多个文档,如下:
1 2 3 4 5 6 | db.movies.insertMany( [ { "_id" : 3, "title" : "Sixteen Candles" }, { "_id" : 4, "title" : "The Terminator" } ], { "ordered" : false }) |
ordered:指定是否按顺序写入,默认 true,按顺序写入。
虽然 insert 等方法仍然支持向后兼容,但今后不应该在应用程序中继续使用。应该使用 insertOne 和insertMany 来创建文档。
删除文档
deleteOne 和deleteMany 两种方法。这两种方法都将筛选文档(filter document)作为第一个参数。
1 2 | db.movies.deleteOne({ "_id" : 4}) db.movies.deleteMany({ "year" : 1984}) |
数据删除是永久性的。没有任何方法可以撤回删除文档或者删除集合的操作,也无法恢复被删除的文档,当然从以前的备份中恢复除外。
更新文档
updateOne、updateMany 和 replaceOne。
updateOne 和 updateMany都将筛选文档作为第一个参数,将变更文档作为第二个参数,后者对要进行的更改进行描述。
replaceOne 同样将筛选文档作为第一个参数,但第二个参数是一个用来替换所匹配的筛选文档的新文档。
更新文档是原子操作:如果两个更新同时发生,那么首先到达服务器的更新会先被执行,然后再执行下一个更新。
1 2 3 4 | db.movies.replaceOne( { "_id" : 1} , { "_id" : 1, "title" : "mongo111" } ); |
更新运算符
"$set" 用来设置一个字段的值。如果这个字段不存在,则创建该字段。
1 2 | db.movies.updateOne({ "_id" : 1}, { "$set" : { "a1.a11" : "a11" }}) |
可以用 "$unset" 将这个键完全删除
1 2 | db.movies.updateOne({ "_id" : 1}, { "$unset" : { "a1" : "" }}) |
数组运算符
如果数组已存在,"$push" 就会将元素添加到数组末尾;如果数组不存在,则会创建一个新的数组。
1 2 | db.movies.updateOne({ "_id" : 1}, { "$push" : { "b1" : "b1" }}) |
"$push" 使用 "$each" 修饰符,在一次操作中添加多个值:
1 2 | db.movies.updateOne({ "_id" : 1}, { "$push" : { "b1" : { "$each" : [562.776, 562.790, 559.123]}}}) |
可以使用 "$slice" 修饰符配合 $push 来防止数组的增长超过某个大小
1 2 3 4 5 6 7 8 9 | db.movies.updateOne({ "_id" : 1}, { "$push" : { "b1" : { "$each" : [ "111" , "222" ], "$slice" : -1 } } }) |
在截断之前可以将 "$sort" 修饰符应用于 "$push" 操作
1 2 3 4 5 6 7 8 9 10 11 12 | db.movies.updateOne({ "_id" : 1}, { "$push" : { "b2" : { "$each" : [ { "name" : "aaa" , "rating" : 6.6}, { "name" : "bbb" , "rating" : 4.3}], "$slice" : -2, "$sort" : { "rating" : 1} } } }) |
参考: MongoDB权威指南(第3版)第 3 章 创建、更新和删除文档
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2019-01-29 request param 获取
2018-01-29 js 判断 是否在当前页面 当前页面是否在前端