MongoDB update set设置器

MongoDB update set设置器

MongoDB 中,通过 update 更新记录时,其中的 update 字段,如果我们不指定 set 设置器,那么默认就是将整个匹配到的文件进行替换,如果指定了 set,那么就是将该字段进行替换,如果该字段不存在,则插入该字段。

因此,我们在使用 update 更新 mongDB 的记录时,如果仅仅是想更新某个字段,而不是对整个文档进行替换,那么一定不能忘记 set 设置器,否则,数据就会丢失。

MongoDB update set设置器详解

语法

db_name.collection_name.update({"name":"HAICODER"}, {"name":"haicoder"})

说明

使用如上的语句对记录进行更新时,会将 name 为 HAICODER 的记录,更新为 "name":"haicoder",如果此时记录中还有其他的字段,那么这些字段都会丢失,如果我们仅仅想更新 name 字段的值,那么我们应该使用如下语句:

db_name.collection_name.update({"name":"HAICODER"}, {"$set":{"name":"haicoder"})

这条语句,是将 name 字段替换为 haicoder,其他字段不变。

案例

我们首先,使用 mongo 命令,连接上数据库,具体命令如下:

mongo

如下图所示:

56_mongodb update set设置器.png

现在,我们使用 use 命令,切换到 haicoder 数据库,具体命令如下:

use haicoder

现在,我们使用 insertMany 插入多条记录,具体命令如下:

db.haicoder.insertMany([{"name":"haicoder", "url":"www.haicoder.net"}, {"name":"HaiCoder", "url":"www.haicoder.net"}, {"name":"golang", "url":"https://haicoder.net/golang/golang-tutorial.html"}])

执行完毕后,此时,如下图所示:

57_mongodb update set设置器.png

我们看到,此时提示我们成功插入了三条记录,现在,我们使用 find 查询当前的所有记录,具体命令如下:

db.haicoder.find()

执行完毕后,此时,如下图所示:

58_mongodb update set设置器.png

现在,我们使用 update 修改 name 字段,具体命令如下:

db.haicoder.update({"_id" : ObjectId("5f62deda44c83190d8f6c3c3")}, {"name" : "HAICODER"})

执行完毕后,我们再次使用 find 查看记录,如下图所示:

59_mongodb update set设置器.png

我们看到,这次,我们更新的记录只剩下 name 字段了,因为我们没有使用 set 设置器,现在,我们再次使用 set 设置器更新记录,具体命令如下:

db.haicoder.update({"_id" : ObjectId("5f62deda44c83190d8f6c3c4")}, {"$set":{"name" : "HAICODER"}})

执行完毕后,我们再次使用 find 查看记录,如下图所示:

60_mongodb update set设置器.png

我们看到,这次,我们只更新了 name 字段,其他的字段还在。

MongoDB update set设置器总结

在 MongoDB 中,通过 update 更新记录时,其中的 update 字段,如果我们不指定 set 设置器,那么默认就是将整个匹配到的文件进行替换,如果指定了 set,那么就是将该字段进行替换,如果该字段不存在,则插入该字段。

因此,我们在使用 update 更新 mongDB 的记录时,如果仅仅是想更新某个字段,而不是对整个文档进行替换,那么一定不能忘记 set 设置器,否则,数据就会丢失。