monggodb学习过程--update
发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,今天看书看到mongodb权威指南这本书对update这一篇进行了详细详解,因为知识点有点多,所以博客记录一下,如果只是看我觉得明天就忘了。更新文档有两种方式:1,文档替换 2,修改器替换(只是修改单
千家信息网最后更新 2025年11月14日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安全错误
数据库的锁怎样保障安全
广州西餐自助点餐机软件开发
近三年网络安全事件案例
数据库和多媒体的未来发展状况
健全红色资源数据库
重置被保护数据库
esxi家用服务器
南阳市有没有软件开发学校
ccer数据库
怎样用云服务器登录
晋城网络安全监察部门
做网络安全PPT
梦想堡垒服务器
绝地求生哪个服务器难
孟玉珍数据库
六安软件开发外包公司
开发数据库 报价
全国延迟最低的dns服务器
数据库中i类属性
郑州软件开发人员工资待遇
网络安全模式下怎样打印文件
乌鲁木齐网络安全公司有哪些
清除管理服务器信息
山西启智互动网络技术有限公司
网卡按网络技术可分为
软件开发流程的具体内容
70级数据库
软件开发征税优惠
重庆綦江众道生鲜软件开发
湖北hp服务器维修调试多少钱
软件开发行业的图片