mongoose中如何给数据添加对应schema中没有的字段
来源:互联网 发布:如何升级mac os 编辑:程序博客网 时间:2024/06/06 23:08
mongoose中如何给数据添加对应schema中没有的字段
文中js代码用的标准是ECMA6
问题解释:
当使用mongoose驱动数据库时,假如我们有这样的Schema
var mongoose = require("mongoose");var Schema = mongoose.Schema;var UserSchema = new Schema({ name: String, gender: Boolean});mongoose.model("User", UserSchema);mongoose.connect("mongodb://mongo服务器IP:27017/数据库名");var db = mongoose.connection;db.once("open", function () { console.log("Mongo Connected");});db.on("error", console.error.bind(console, "Mongoose Connection Error"));
插入一条实验数据
var User = mongoose.model("User");var user = new User({ name: "test", gender: true});yield user.save();
那么当我们查询User表获取到数据后这样操作时
var user = yield User.findOne({name: test});console.log(user);//{ _id: ObjectId("……"), name: "test", gender: true }user.name = "test1";user.school = "华南理工大学";console.log(user);//{ _id: ObjectId("……"), name: "test1", gender: true }yield user.save();
可以看到,Schema中定义了的name被修改成功,但是school字段添加不成功,这正是mongoose的优点,对于不符合Schema的字段的操作是不起作用的,但同时造成了一定的局限性。比如当查询出来的User有不同的属性,他可能是管理员,黑名单成员,这时候我们需要给他添加一个category字段来表示他的类型再返回给前端,但是数据库表中并不需要这个字段,因为他储存在不同的表中,这时候我们要怎么才能给他加字段然后返回呢?
下面给大家晒晒我的解决路线:
首先我思考了一下mongoose是怎样实现这样的效果的,我的猜想是用mongoose对数据进行了封装,当我们对user这个对象进行扩展或者修改时它会先检查扩展或修改后是否符合Schema规范,如果不符合,则操作不生效,如果符合,则操作生效。假如这个猜想是正确的,那么user这个对象一定有一个用来储存数据属性并且这个属性是可以随意修改的。于是我将user的所有键值打印了出来:
var _ = require("underscore");console.log(_.keys(user));//[ '$__', 'isNew', 'errors', '_doc', '$__original_save', 'save', '_pres', '_posts' ]
从打印出来的键值名不难看出_doc应该就是用来储存数据的,打印一下:
console.log(user._doc);//{ _id: ObjectId("……"), name: "test1", gender: true }
接下来试一下能否对这个对象进行不符合Schema的操作:
console.log(user._doc);//{ _id: ObjectId("……"), name: "test1", gender: true }user._doc.school = "华南理工大学";console.log(user._doc);//{ _id: ObjectId("……"), name: "test1", gender: true, school: "华南理工大学" }
事实证明我的猜想是正确的,nice!
总结:当我们想对mongoose数据进行不符合schema的修改又不想修改schema时,可以直接修改data._doc
, 当然在你调用data.save()
时,这个数据中不合法的数据还是不会被保存到数据库。
0 0
- mongoose中如何给数据添加对应schema中没有的字段
- iOS10中 info.plist添加需要权限对应的字段
- mongoose-schema数据表字段含义
- ArcMap中如何给shp文件的路线数据添加不同标注,添加不同颜色
- Oracle数据库中,如何给已有很多数据的表填充自增序列字段
- 在Mybaties中进行数据查询时,表中字段名和属相名没有对应起来,查询的结果总null,一下是解决方法
- 实训练习2 双击GridView 任何一条数据后,页面没有刷新,并将该行的数据显示在对应的字段中
- mysql中添加主键和给字段名中间添加一个新的字段
- 在数据库中某个字段的数据中添加"'"
- node中mongoose操作数组类型字段
- 如何将数据添加到自定义的DataTable中并赋值给list实现打印功能。
- ArcEngine中对已经存在的数据表格添加字段
- Eclipse添加Layout没有在R中自动生成对应的项目
- 给数据添加计算字段
- HTTTP协议头中,添加某一个字段,获取返回数据中头信息的某一个字段。
- sql server中如何循环添加字段
- solr配置文件schema文件中字段的介绍
- 清理数据库中对应某个字段的所有非法数据的一种解决方案 SQL语句
- 牛顿迭代法求方根
- 欢迎使用CSDN-markdown编辑器
- java内存溢出
- 阿里巴巴Java岗面试经验
- js将echarts图表转换成base64位格式编码的图片
- mongoose中如何给数据添加对应schema中没有的字段
- SublimeTest配置笔记
- IOS8与IOS9不同点
- Andrew NG机器学习课程笔记系列之——从导数谈起
- 缩放夹逼求极限_20160312
- shell中for循环总结
- 【2016.3.12】chown 解析
- POI 实现甘蔗图报表与效果图
- Andrew NG机器学习课程笔记系列之——Introduction to Machine Learning