monggodb学习过程--update
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,今天看书看到mongodb权威指南这本书对update这一篇进行了详细详解,因为知识点有点多,所以博客记录一下,如果只是看我觉得明天就忘了。更新文档有两种方式:1,文档替换 2,修改器替换(只是修改单
千家信息网最后更新 2025年02月03日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安全错误
数据库的锁怎样保障安全
潮州专业软件开发平均价格
西咸手机软件开发
简单的网络安全手抄报内容
大学数据库技术与应用好过吗
海南中和药业公司软件开发
怎么退出向日葵远程的服务器
计算机网络技术征兵宣传
数据库添加删除语句
潍坊软件开发招聘信息
网络安全靠师生主题班会
近年网络安全大事件
ios软件开发用什么
数据库权利保护的
服务器专线价格
昭通互联网科技在哪里
数据中心机房网络安全管理
当存有网页的服务器暂时出现故障
数据库之大象
软件开发合同的审查要点
小软件开发需要多少资金
销售软件开发哪个好
数据库活动监视器
软件开发过程 敏捷开发
账号和数据库数据关联
密匙管理服务器售价
服务器怎么看磁盘占用率
中国专利数据库文摘
在数据库中怎么添加新记录
山东清峰网络技术有限公司
南京移动软件开发