monggodb学习过程--update
发表于:2024-10-26 作者:千家信息网编辑
千家信息网最后更新 2024年10月26日,今天看书看到mongodb权威指南这本书对update这一篇进行了详细详解,因为知识点有点多,所以博客记录一下,如果只是看我觉得明天就忘了。更新文档有两种方式:1,文档替换 2,修改器替换(只是修改单
千家信息网最后更新 2024年10月26日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安全错误
数据库的锁怎样保障安全
澳洲云服务器
4g无线网络安全图表
浙江信息化软件开发服务参考价格
微信是数据库吗
云服务器如何设置两个网页
网络安全手抄报电脑制作
实用办公软件开发
提高通过对网络安全
软件开发都有什么平台
网络安全入门是啥书
桓台仓储库存软件开发公司
金蝶费用发票数据库表
华软无线移动网络技术作业
重庆天恒互联网科技集团
淄川计划软件开发定制
虚拟主机一共要几台服务器
盐田区网络技术转移好处
广州服务器电源解决方案
数据库的基本结构包括原始数据
找软件开发系统
水星4530r改打印机服务器
工业园区操作性能好服务器生产商
ip数据库sql
geo数据库如何设置gse
数据库监听如何成功
数据库 分表 查询
软件开发与集成电路全国排名
个人的网络安全策略
北京手机软件开发质量放心可靠
可以测速的ip服务器