共计 1219 个字符,预计需要花费 4 分钟才能阅读完成。
在上一篇文章中给出了使用文档替换的方法来实现数据的更新的,但是大部分情况下都是涉及文档内部的数据更新,所以可以使用$set的方式来实现。
//db.test.findOne({})
{
"_id" : ObjectId("5afd34052c63ae1a943bdb27"),
"name" : "joe",
"friends" : 32.0,
"enemies" : 2.0
}
现在我们需要使用$set的方式更改用户的名字
db.test.update({"friends" : 32.0,
"enemies" : 2.0},{"$set":{"name":"hello"}})
log日志如下
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
现在我们在查看下结果
db.test.findOne({"friends" : 32.0, "enemies" : 2.0})
输出结果
{
"_id" : ObjectId("5afd34052c63ae1a943bdb27"),
"name" : "hello",
"friends" : 32.0,
"enemies" : 2.0
}
到目前为止我们使用的直接修改当前已存在字段数据,假设当前的文档数据里面不存在对应的字段会怎么样?
如果当前的要更新的字段在文档中并不存在,那么会给当前的文档自动新增字段
db.test.update({"friends" : 32.0,
"enemies" : 2.0},{"$set":{"movie":"titanic"}})
我们尝试更新这个文档的电影字段,希望将字段值更改为Titanic,但是从刚才的测试数据来看,实际上并没有movie字段
现在这个语句的执行结果如下
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
我们在查询看看
{
"_id" : ObjectId("5afd34052c63ae1a943bdb27"),
"name" : "hello",
"friends" : 32.0,
"enemies" : 2.0,
"movie" : "titanic"
}
从上面可以看出即使你的文档没有对应的字段在使用set会自动给你添加新的字段数据
到这里可以知道怎么去更新文档中某一个字段的内容了,现在我反悔了不想给当前的文档添加movie字段,那么我们可以使用unset的办法来实现删除这个字段
db.test.update({"friends" : 32.0,
"enemies" : 2.0},{"$unset":{"movie":1}})
log日志
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
修改后的文档的情况
{
"_id" : ObjectId("5afd34052c63ae1a943bdb27"),
"name" : "hello",
"friends" : 32.0,
"enemies" : 2.0
}
正文完
请博主喝杯咖啡吧!