在 MongoDB 中,通过 update 更新记录时,其中的 update 字段,如果我们不指定 set 设置器,那么默认就是将整个匹配到的文件进行替换,如果指定了 set,那么就是将该字段进行替换,如果该字段不存在,则插入该字段。
因此,我们在使用 update 更新 mongDB 的记录时,如果仅仅是想更新某个字段,而不是对整个文档进行替换,那么一定不能忘记 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
如下图所示:
现在,我们使用 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"}])
执行完毕后,此时,如下图所示:
我们看到,此时提示我们成功插入了三条记录,现在,我们使用 find 查询当前的所有记录,具体命令如下:
db.haicoder.find()
执行完毕后,此时,如下图所示:
现在,我们使用 update 修改 name 字段,具体命令如下:
db.haicoder.update({"_id" : ObjectId("5f62deda44c83190d8f6c3c3")}, {"name" : "HAICODER"})
执行完毕后,我们再次使用 find 查看记录,如下图所示:
我们看到,这次,我们更新的记录只剩下 name 字段了,因为我们没有使用 set 设置器,现在,我们再次使用 set 设置器更新记录,具体命令如下:
db.haicoder.update({"_id" : ObjectId("5f62deda44c83190d8f6c3c4")}, {"$set":{"name" : "HAICODER"}})
执行完毕后,我们再次使用 find 查看记录,如下图所示:
我们看到,这次,我们只更新了 name 字段,其他的字段还在。
在 MongoDB 中,通过 update 更新记录时,其中的 update 字段,如果我们不指定 set 设置器,那么默认就是将整个匹配到的文件进行替换,如果指定了 set,那么就是将该字段进行替换,如果该字段不存在,则插入该字段。
因此,我们在使用 update 更新 mongDB 的记录时,如果仅仅是想更新某个字段,而不是对整个文档进行替换,那么一定不能忘记 set 设置器,否则,数据就会丢失。