1. 首页
  2. 开发

关于踩到mongoose的一个小坑

大家都知道mongodb是schemaless,他的好处是可以随便定义字段进行存储。而mongoose恰恰和它不同,是有Schema的,而这里就会在潜意识中踩到坑了。

mongodb是文档型的数据库,一条记录是以文档为最小单位,而不像传统的关系型数据库需要预先定义表结构。

而mongoose让mongodb在存储时加入了schema的概念,而其中有一些不起眼的规则恰恰有时候遇到就万万妹想到~ 今天碰到的就是这个问题,我在查询一篇文章时,顺便把他的文章作者的实体也查询出来并复制给文章实体时,这时我想要将这个文章对象连带作者缓存起来,而缓存时,他在内部是调用了toJSON方法的,默认将schema之外的属性给去掉了。

于是今天调了半天都是作者信息undefined问题,首先以为缓存出了问题,后来以为查询有问题,最后想到可能由于mongoose的schema引起的,查了下api果然是。

option: toObject Documents have a toObject method which converts the mongoose document into a plain javascript object. This method accepts a few options. Instead of applying these options on a per-document basis we may declare the options here and have it applied to all of this schemas documents by default. To have all virtuals show up in your console.log output, set the toObject option to { getters: true }:

我的解决方案是:

先将mongoose的模型对象调用toObject方法转换成javascript对象,然后再进行属性添加,这时再放入缓存中就可以了。

收藏

暂无评论

登录后可以进行评论。没有账号?马上注册