在上一篇文章中给出了使用文档替换的方法来实现数据的更新的,但是大部分情况下都是涉及文档内部的数据更新,所以可以使用$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 }