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 ...
随机推荐
- Linux常用指令整理
Linux常用命令整理 快捷键 [Tab] [Tab] 接在一串指令的第一个字的后面,则为"命令补全": [Tab] 接在一串指令的第二个字以后时,则为"文件补齐&quo ...
- css-flex布局知识梳理
一.传统的布局 布局的传统解决方案,基于盒装模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 二. Flex的 ...
- CSS之inline和inline-block
inline-block 控制台-代码: PS:inline-block是让元素以内联形式存在,也就是不是块级,但是表现起来(又具有块级元素的高度)--也就是可以调高度(margin或者padding ...
- vue 数组重复,循环报错
Vue.js默认不支持往数组中加入重复的数据.可以使用track-by="$index"来实现.
- CSS3,transform3D立体可拖拽正方体实现原理
---恢复内容开始--- 今天咱们来说一下,CSS中的3D效果 .如果你把transform真的掌握的和纯熟的话,就可以直接通过CSS做出很多很炫酷的效果,甚至.轮播图和选项卡都可以通过CSS来做,咱 ...
- DUANG~ 万网轻云服务器,大促狂欢,不仅仅免单!
DUANG~ 万网轻云服务器,大促狂欢,不仅仅免单! 当老板第一次知道我们要做活动的时候,其实是拒绝的.DUANG~ 打折.降价.挥泪甩卖…太俗套.客户看到一定骂我们,根本没有诚意. 所以轻云大促 ...
- Unity导出APk出错解决方法二
错误提示(需得打开编辑器log文件才能看到全部log,Unity3d只显示一部分): Error building Player: CommandInvokationFailure: Unable t ...
- Log4net (Log for .net)
Log4net (Log for .net) 开源的记录日志的组件,是从java的Log4J移植到.net 日志文件存放的位置 在项目新建“App_Code”和“App_Data”,该文件夹客户端无法 ...
- Retrofit-入门使用
1. 在模块目录下的build.gradle dependencies { compile "com.squareup.retrofit2:retrofit:2.1.0" comp ...
- Maven学习---使用maven进行项目构建
1. 使用maven进行项目构建 MyEclipse 自带maven 插件 Eclipse 需要单独安装maven插件 1.1. Maven 在企业中怎么用的 ? Maven : 项目构建工具 ,进行 ...