Open smallnewer opened 9 years ago
在mongoose中有个配置属性是 minimize,用法:
schema.set('toObject', { minimize: false });
mongoose把每个文档用自家的document类封装了一下,提供了一些方便的接口(当然有些也有隐性问题),有时我们需要把document转换成JS原生对象,就要调用toObject方法。 此时就会出现一个问题,如果一个字段是空对象或空数组,toObject方法就会把它删掉(据说是之前mongodb不能存空对象?不管什么原因,这么做好坑。),这个过程被叫做minimize。 我们设置其为false,就可以屏蔽这个过程。
然而最近发现另外一个问题,就是当我们用create、save流程去创建并保存一个文档时,即便设置了minimize为false,仍然会过滤掉空对象。这对我们在schema中设置默认值空对象是非常不利的。
还没研究有没有相关配置,好在用upsert方法可以避免。
var handle = yield model.$findOneAndUpdate({ _id: uid }, { $set: { _id: uid }, $setOnInsert: model.$getOnInsertData('-_id') }, { new: true, upsert: true }) // 其中$getOnInsertData大约做了如下事情: // 1. (this.create({})).toObject();创建一个完整、隔离的文档 // 2. 把本次修改的字段从文档中删除
在mongoose中有个配置属性是 minimize,用法:
mongoose把每个文档用自家的document类封装了一下,提供了一些方便的接口(当然有些也有隐性问题),有时我们需要把document转换成JS原生对象,就要调用toObject方法。 此时就会出现一个问题,如果一个字段是空对象或空数组,toObject方法就会把它删掉(据说是之前mongodb不能存空对象?不管什么原因,这么做好坑。),这个过程被叫做minimize。 我们设置其为false,就可以屏蔽这个过程。
然而最近发现另外一个问题,就是当我们用create、save流程去创建并保存一个文档时,即便设置了minimize为false,仍然会过滤掉空对象。这对我们在schema中设置默认值空对象是非常不利的。
还没研究有没有相关配置,好在用upsert方法可以避免。