Mongoose 对象的特殊性
一、偶遇难题
在最近使用Mongoose的时候,遇到这样一个问题:
我从DB中查询出来一个对象,比如是Book,这个对象我想在返回时,给他附加一个字段,比如是字段A,正常来说,JS你只需要Book.A=Value,然后直接返回就是了,但是我在使用Mongoose的时候,无论如何,这个字段都不会被返回,但他也没有报错,搞得我都有点怀疑人生了。
二、万能的同事
几经周折,同事告知可能与Mongoose有关,他在Model中可以配置一些东西,比如:
{
strict: true,
toObject: {
virtuals: true
},
toJSON: {
virtuals: true
}
}
解释一下这里面的几行代码,
第一句:strict,严格模式,用来配置在存入数据库时,是否严格按照模型所约定的字段来,如果设置为false,则模型定义之外的字段也可以被存储。
第二句:toObject,在toObject时的一些配置,比如virtuals:true就表示virtulas字段也可以被转换到新的对象中
第三句与第二句差不多,是配置在转换成为json时候的一些配置。
这里如果你想研究toObject和toJson时的更多配置,可以查看官方文档:http://mongoosejs.com/docs/api.html#document_Document-toObject
这里的可配置项还有:
getters输出所有字段和virtual字段virtuals设置virtual的输出,可以覆盖掉getters的配置minimize在输出时删掉里面的空字段,默认为truetransform在转换之前,可以利用这个方法做点想做的事情depopulate 这个貌似是如果有外键关联过的,把关联的对象只保留一个id,默认为falseversionKey版本号,这个应该是并发控制里面用的,没有实际测试retainKeyOrder输出的顺序是否按所配置的key来,如果你对顺序有要求,那可以事先配置一下key,配置方法:Object.keys(new Doc({ a: 1, b: 2}).toObject())
三、解决问题
不过这个配置并不能解决我们的问题,但是回头想想,他既然提供一个toObject方法,那就说明他这个对象不是一个标准的javascript对象,那我们把他toObject之后,然后再去加一些自己想要的属性上去,最终序列化出去,不就完事儿了吗?
最终的代码类似于:
var model = obj.toObject();
model.isBorrow = false;
cb(null, model);
果然,最终解决了这个问题。
Mongoose 对象的特殊性的更多相关文章
- JS对象深刻理解 - 1
JavaScript创建对象 JavaScript 有Date.Array.String等这样的内置对象,功能强大使用简单,人见人爱,但在处理一些复杂的逻辑的时候,内置对象就很无力了,往往需要开发 ...
- mongoose学习文档
名词解释 Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由Schema发布生成的模型,具有抽象属性和行为的数据库操作对 来自cnode社区 1.创建一个 ...
- Nodejs学习笔记(十四)— Mongoose介绍和入门
目录 简介 mongoose安装 连接字符串 Schema Model 常用数据库操作 插入 更新 删除 条件查询 数量查询 根据_id查询 模糊查询 分页查询 其它操作 写在之后... 简介 Mon ...
- mongoose一看就会的基本操作
Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:http: ...
- mongoose 入门基本操作
简介 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:ht ...
- python对象反射和函数反射
python的对象反射功能,经常在编程时使用.相比较其它的编程语言使用非常方便.反射就是用字符串来操作对象或者类,模块中的成员. 一.对象的反射 反射功能的实现,由这4个内置函数来实现(hasattr ...
- Nodejs学习笔记(十四)—Mongoose介绍和入门
简介 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:ht ...
- Mongoose使用——nodejs结合mongodb
0. 前言: Mongoose是NodeJS的驱动,不能作为其他语言的驱动.Mongoose有两个特点: 通过关系型数据库的思想来设计非关系型数据库 基于mongodb驱动,简化操作 Mongooos ...
- mongodb学习(3)--- NodeJs使用mongoose操作mongodb
转载: https://cnodejs.org/topic/50c145ed637ffa4155c7eaee 首先对于以下错误说明(有写 db.close): Error: db object alr ...
随机推荐
- Javascript之for循环该注意的问题
很多时候我们都用到for循环,而用到for循环部门往往对一个数组进行循环,其中我们很多时候都是这样写的: // 次佳的循环 for (var i = 0; i < myarray.length; ...
- hdu 1561 树形背包 选k个最大价值
http://blog.csdn.net/dellaserss/article/details/8799730 这题其实和上一题思路是一样的,一个0节点作为根节点,通过剩余量来遍历子树. #inclu ...
- Maven打包时,不包含jar包
在给Maven项目打war包时,如果不想把依赖中的jar包也包含进去,可以在plugins中加入 <span style="white-space:pre"> < ...
- Python OOP面向对象
一.什么是面向对象的程序设计 1.面向过程 程序设计:核心是过程二字,过程指的是解决问题的步骤,即先干什么再干什么......面向过程的设计就好比精心设计好一条流水线,是一种机械式的思维方式. 优点是 ...
- 跨域解决方案之HTML5 postMessage
问题场景: web是嵌入到手机客户端中的静态页面,为了统计用户行为需要引入ga,但是ga必须是在www下才行,哪怕是localhost,这就是矛盾.解决方案是在页面中使用iframe,iframe是在 ...
- Springboot基础知识
1.@RestController注解 Spring4之后新加入的注解,@RestController是@ResponseBody和@Controller的组合注解.(返回json需要@Respons ...
- 完美解决Office2003、Office2007、Office2010、Office2013共存方法
原文:http://www.360doc.com/content/14/0903/16/7555793_406799011.shtml 微软Office深受广大用户的青睐,特别是经典的Office 2 ...
- TextSwitcher(文本切换器)和ViewFlipper
1.TextSwitcher 使用: 应用分为三步: 1.得到 TextSwitcher 实例对象 TextSwitcher switcher = (TextSwitcher) findViewB ...
- python itchat 微信开发
使用itchat可以简单操作微信,进行好友和群消息的发送 安装: pip install itchat 使用: import itchat, time # 登录 itchat.auto_login(h ...
- SQL Server ->> SQL Server 2016新特性之 -- Dynamic Data Masking
Dynamic Data Masking是为了防止敏感数据暴露给未经授权的用户,以一种最小开销和维护成本的形式.Dynamic Data Masking用于表的字段,相当于盖住字段数据的一部分.比如一 ...