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 ...
随机推荐
- c#开源项目收集
1百度云高速下载c#开源: https://github.com/ResourceHunter/BaiduPanDownloadWinform 2.IdaCsharp http://idacsharp ...
- js-TextArea的换行符处理
js-txt文本处理 写自己主页项目时所产生的小问题拿出来给大家分享分享,以此共勉. ---DanlV TextArea的换行符处理 TextArea文本转换为Html:写入数据库时使用 js获取了t ...
- js获取当前日期和时间的代码
最佳答案 var myDate = new Date(); myDate.toLocaleDateString(): //获取当前日期myDate.toLocaleTimeString(); //获取 ...
- 花1台的钱入手2台【最能抗DDoS】阿里云主机【攻略】
花1台的钱入手2台[最能抗DDoS]阿里云主机[攻略]: 第一步:先申请0元半年 http://click.aliyun.com/m/335/:注:0元机器只有新帐号可申请第二步:再买6折37/月 h ...
- 在Datagridview中添加datagridviewComboBox列并显示下拉列表
在DataGridView中自动的添加Column. private void button_autoAddColumn_Click(object sender, EventArgs e) { try ...
- 关于安卓开发的学习一:webview
在网上看到几篇不错的博客,分享和学习一下! Android使用WebView加载网页 https://blog.csdn.net/tuke_tuke/article/details/51684254 ...
- Android Animation 知识点速记备忘思维导图
备注的大段文本,无法在图片中体现, 思维导图源文件放在附件中.使用 Xmind 8 制作. 附件:AndroidAnimation-xmind.zip
- Java—IO流 对象的序列化和反序列化
序列化的基本操作 1.对象序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 2.序列化流(ObjectOutputStream),writeObject 方法用于将对象写入输出流中 ...
- 无需安装 vsftpd , 直接使用 FTP 来管理 docker 容器中的文件
无图无真相,先放个效果图: 背景 使用 docker 来跑一些服务很方便,但是有的时候想管理容器里面的文件却很麻烦 -- 一般常规做法有3种: 通过数据卷或数据卷容器的方式 启动容器的时候时候 ...
- git revert .vs. git reset .vs. git rebase
1. git rervert的工作方式是:将一个老的commit的改动完全找出来,并且在新的tip处运行反操作,最终清除老commit的改动: git revert的应用场景多在对public rep ...