monggodb学习过程--update
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,今天看书看到mongodb权威指南这本书对update这一篇进行了详细详解,因为知识点有点多,所以博客记录一下,如果只是看我觉得明天就忘了。更新文档有两种方式:1,文档替换 2,修改器替换(只是修改单
千家信息网最后更新 2026年11月02日monggodb学习过程--update
今天看书看到mongodb权威指南这本书对update这一篇进行了详细详解,因为知识点有点多,所以博客记录一下,如果只是看我觉得明天就忘了。
更新文档有两种方式:
1,文档替换 2,修改器替换(只是修改单个字段的内容)
关于update有哪些参数可以看一下帮助文档
db> db.blog.updatefunction (query, obj, upsert, multi)query:条件obj:对象,更新的类容upsert:判断更新的条件是否存在multi:默认情况下更新只对符合匹配条件的第一个文档执行操作,要是这个为true,就是配置内容所以都更新
文档替换
当前的数据类型是
wangaimin> db.test.findOne({"name":"bob"}){ "_id" : ObjectId("58e4b6410b8bd344936c8553"), "name" : "bob", "email" : "bob@email.com.cn", "content" : "nice post"}我需要变成这个样子:
wangaimin> db.test.find({"name" : "bob"}){ "_id" : ObjectId("58e4b6410b8bd344936c8553"), "name" : "bob", "comments" : { "email" : "bob@email.com.cn", "content" : "nice post" } }操作步骤是:
wangaimin> var Test=db.test.findOne({"name":"bob"})Test.comments={"email":Test.email,"content":Test.content}delete Test.contentdelete Test.emaildb.test.update({"name" : "bob"},Test)其实这个地方有一个坑,就是_id,如果你匹配中有多个name="bob",你就会报错,_id必须是唯一的,所以可以也可以执行delete Test._id,这里没有写的很详细,大家可以仔细想一下,如果不想是没有记忆点使用修改器:
1,$set修改器
修改之前:wangaimin> db.test.find({"name" : "bob"}){ "_id" : ObjectId("58e4b6410b8bd344936c8553"), "name" : "bob", "comments" : { "email" : "bob@email.com.cn", "content" : "nice post" } }命令:db.test.update({"name" : "bob"},{$set:{"name":"BOB"}})修改之后:wangaimin> db.test.find({"name" : "BOB"}){ "_id" : ObjectId("58e4b6410b8bd344936c8553"), "name" : "BOB", "comments" : { "email" : "bob@email.com.cn", "content" : "nice post" } }修改内嵌文档:命令:wangaimin> db.test.update({"name" : "BOB"},{$set:{"comments.content":"change le"}})修改之后:wangaimin> db.test.find({"name" : "BOB"}){ "_id" : ObjectId("58e4b6410b8bd344936c8553"), "name" : "BOB", "comments" : { "email" : "bob@email.com.cn", "content" : "change le" } }2,$inc 增加和减少注意:$inc 键的值必须是数字,不能为字符串,数组或其他非数字的值db.test.find(){ "_id" : ObjectId("58e4bb4b0b8bd344936c8554"), "number" : 10 }wangaimin> db.test.update({"number":10},{$inc:{"number":3}})wangaimin> db.test.find(){ "_id" : ObjectId("58e4bb4b0b8bd344936c8554"), "number" : 13 }3,$push添加数组
如果数组已经存在,$push会向已有的数组末尾加入一个元素,要是没有就创建一个新的数组
db.test.find(){ "_id" : ObjectId("58e4bd5f0b8bd344936c8555"), "school" : "bd" }db.test.update({"school":"bd"},{$push,{"list":{"name":"zhangsan","age":20}}})db.test.find(){ "_id" : ObjectId("58e4bd5f0b8bd344936c8555"), "school" : "bd", "list" : [ { "name" : "zhangsan", "age" : 20 } ] }4,使用$each添加多个值
db.test.update({"school":"bd"},{$push:{"list":{$each:[{"name":"zhangsan","age":21},{"name":"zhangsan","age":22},{"name":"zhangsan","age":23},{"name":"zhangsan","age":24}]}}}){ "_id" : ObjectId("58e4bd5f0b8bd344936c8555"), "school" : "bd", "list" : [ { "name" : "zhangsan", "age" : 20 }, { "name" : "zhangsan", "age" : 21 }, { "name" : "zhangsan", "age" : 22 }, { "name" : "zhangsan", "age" : 23 }, { "name" : "zhangsan", "age" : 24 } ] }5,使用$slice限制个数,必须使用$each
使用$slice限制数组长度,如果$slice:-10,如果数组的长度小于10($push之后),那么所以的元素都会保留,如果数组的元素大于10,只有最后10个元素会报错,重点$slice的值必须是负数
wangaimin> db.test.find({"name":"test"}){ "_id" : ObjectId("58e4c1d30b8bd344936c8556"), "name" : "test", "id" : [ 1, 2, 3, 4, 5, 7, 7, 1, 2, 3, 4, 5, 5 ] }wangaimin> db.test.update({"name":"test"},{$push:{"id":{$each:[1,2,3],$slice:-5}}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })wangaimin> db.test.find({"name":"test"}){ "_id" : ObjectId("58e4c1d30b8bd344936c8556"), "name" : "test", "id" : [ 5, 5, 1, 2, 3 ] }6,将数组作为数据集使用($ne,$addToSet)
因为数组的元素是可以重复的,设置这个就是让数组的元素不可以重复
数组
元素
文档
更新
修改器
就是
条件
内容
只是
命令
多个
数字
数据
要是
长度
会报
限制
个数
单个
博客
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
伟宏互联网科技
工业互联网科技新基建
科技制造互联网公司
唐信互联网科技
朗涯互联网科技
未来的互联网科技
上海喔噻互联网科技
上海万想互联网科技
互联网科技产品
互联网科技产业特征
互联网科技大奖都有哪些公司
本届互联网博览会上的黑科技
允成互联网科技有限公司融资
工业互联网等科技实现智能化赋能
领航科技大厦互联网公司
互联网时代科技型公司的机会
互联网公司属于科技吗
保山浩联互联网科技有限公司
黑龙江互联网科技公司
现代科技的标志之一的互联网
互联网科技金融公司
上海喔噻互联网科技
润盈互联网科技
掌上梦互联网科技
成都仁贤领冠互联网科技有限公司
互联网科技公司需要的职位
温州喔噻互联网科技有限公司
开一家科技互联网公司需要多少钱
河南住房之家互联网科技
科技互联网经济论坛