千家信息网

MongoDB文档更新(一)

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,MongoDB文档更新:1.可以是采用删除原文档然后插入一个更新后的新文档到数据库中;2.基于原文档使用修改器修改原文档中的文档属性。下面主要说明的是使用基于原文档使用update方法结合修改器修改文
千家信息网最后更新 2025年01月19日MongoDB文档更新(一)

MongoDB文档更新:1.可以是采用删除原文档然后插入一个更新后的新文档到数据库中;2.基于原文档使用修改器修改原文档中的文档属性。

下面主要说明的是使用基于原文档使用update方法结合修改器修改文档内容:
修改的数据结构包括文档中的简单属性、数组和嵌套文档。
1.$set修改器:用来指定文档中某一个键的值,如果此键不存在的话就创建。
如要修改如下文档:
> db.c1.find({"name":"user3"});
{ "_id" : ObjectId("4fc145e3703fa637a073651b"), "name" : "user3", "age" : 16 }

将其中的"name"修改成"user16": > db.c1.update({"age":16},{"$set":{"name":"user16"}});
> db.c1.find({"age":16}); { "_id" : ObjectId("4fc145e3703fa637a073651b"), "age" : 16, "name" : "user16" }
往用户为user16的文档中添加一本书:
> db.c1.update({"age":16},{"$set":{"book":"love story"}});
> db.c1.find({"age":16}); { "_id" : ObjectId("4fc145e3703fa637a073651b"), "age" : 16, "book" : "love story", "name" : "user16" }
增加了"book"属性,并添加了一本书。
2.$unset修改器:与$set相对应,可以去掉某一个属性值。
如要删上面文档中的"book"属性,可使用:
db.c1.update({"age":16},{"$unset":{"book":1}});
结果是:
> db.c1.find({"age":16});
{ "_id" : ObjectId("4fc145e3703fa637a073651b"), "age" : 16, "name" : "user16" }其中的"book"属性被删除掉,"1"删除掉book属性。
3.使用$set,$unset修改嵌套文档:
如下嵌套文档: { "_id" : ObjectId("4fc145e3703fa637a073651b"), "address" : { "location" : "linkin street no5", "zip" : "108991" }, "age" : 16, "name" : "user16" }
修改其中的zip属性为"111111":
> db.c1.update({"age":16},{"$set":{"address.zip":"111111"}}); > db.c1.find({"age":16}); { "_id" : ObjectId("4fc145e3703fa637a073651b"), "address" : { "location" : "linkin street no5", "zip" : "111111" }, "age" : 16, "name" : "user16" }
注意,在修改文档的时候不要忘记使用"$set"修改器,否则的话原来的文档会被
{"address.zip":"111111"}替代。
4.数组修改器:对数组的修改,一般包括:添加元素值,删除元素值。
1).首先往一个文档里面添加一个数组,比如在这里往:
db.c1.find({"age":16});
{ "_id" : ObjectId("4fc145e3703fa637a073651b"), "address" : { "location" : "linkin street no5", "zip" : "111111" }, "age" : 16, "name" : "user16" }
添加一个"luckyNumber":[1,8,0]的键值对。可以使用前面的$set完成此操作。
> db.c1.update({"age":16},{"$set":{"luckyNumber":[1,8,0]}});
>db.c1.find({"age":16}); { "_id" : ObjectId("4fc145e3703fa637a073651b"), "address" : { "location" : "linkin street no5", "zip" : "111111" }, "age" : 16, "luckyNumber" : [ 1, 8, 0 ], "name" : "user16" }
2).$push修改器:往"lucyNumber"中压入一个数字,使用此修改器是往数组末尾追加一个数字。
如:db.c1.update({"age":16},{"$push":{"luckyNumber":9}});
> db.c1.find({"age":16}); { "_id" : ObjectId("4fc145e3703fa637a073651b"), "address" : { "location" : "linkin street no5", "zip" : "111111" }, "age" : 16, "luckyNumber" : [ 1, 8, 0, 9 ], "name" : "user16" }
其中luckyNumber多了一个数字9.
如果继续使用db.c1.update({"age":16},{"$push":{"luckyNumber":9}});会在再多出一个9.(此处省略)。
3).$addToSet修改器:把数组当成一个类似于set集合,其中不能存放相同的值。
如在2)的文档中使用:db.c1.update({"age":16},{"$addToSet":{"luckyNumber":9}});
结果会是:
db.c1.find({"age":16});
{ "_id" : ObjectId("4fc145e3703fa637a073651b"), "address" : { "location" : "linkin street no5", "zip" : "111111" }, "age" : 16, "luckyNumber" : [ 1, 8, 0, 9 ], "name" : "user16" }
其中luckyNumber还是只有一个9.

4).$pop数组数据弹出:{"$pop":{key:1}}弹出数组尾部数据,{"$pop":{key:-1}}弹出数组首部数据,
如要弹出luckyNumber的末尾数"9":
> db.c1.update({"age":16},{"$pop":{"luckyNumber":1}});
> db.c1.find({"age":16}); { "_id" : ObjectId("4fc145e3703fa637a073651b"),
"address" : { "location" : "linkin street no5", "zip" : "111111" },
"age" : 16,
"luckyNumber" : [ 1, 8, 0 ],
"name" : "user16" }
弹出luckyNumber中的首位数1:
> db.c1.update({"age":16},{"$pop":{"luckyNumber":-1}}); > db.c1.find({"age":16}); { "_id" : ObjectId("4fc145e3703fa637a073651b"),
"address" : { "location" : "linkin street no5", "zip" : "111111" },
"age" : 16,
"luckyNumber" : [ 8, 0 ],
"name" : "user16" }
其中的1被弹出。


以上是关于文档基本属性和数组属性的更新最基本的操作。






文档 属性 数组 修改器 数据 更新 数字 元素 末尾 结果 相同 中压 位数 内容 只有 尾部 数据库 数据结构 方法 时候 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 dns服务器会记录你的浏览 学习通数据库期末考试答案 宝山区工商软件开发哪家便宜 主机服务器怎么样 集合聊天软件开发 青岛佰锦源网络技术有限公司 数据库连接的关闭规则 服务器程序怎么保存 僵尸工程怎么加入服务器 网络安全教学反思文章 数据库更新迭代 超猎都市公测服务器 怀旧服服务器哪里买 浙江比奇网络技术公司招聘 上海云海服务器端管理中心 数据库会话及请求量暴增 怎么解决sql数据库停止 串口通讯服务器4种工作模式 河北瑞迈尔网络技术有限公司 icloud服务器出错 网络安全周金融日活动总结 品质好的深信服网络安全解决方案 落实网络安全责任制办法 网络运营者网络安全法定职责 西安学软件开发哪家好 幼儿园网络安全三字歌 单台服务器持续集成 pingoracle数据库 安徽质量软件开发价格服务标准 读秀数据库不同模块的内容
0