我们在使用Mongoose的时候,或许大家都会发现回调返回的result无法进行修改,Google了一下,现把方法记录下来供有需要的同学参考一下。
代码我就不贴了,能遇到这个问题的人说明对mongoose语法都是有一定了解的了,那么下面就直接说这种现象的原因。
实际上
mongoose返回的数据并不是object,虽然通过typeof判断类型是Object,但其实mongoose自己封装的一个对象,并且这个对象会对数据进行实时查询以保证其符合预定义的model,而无论添加删除model都不会改变,所以设置无效。
那解决的方法是:
在返回的result对象调用
toObject()或toJSON()方法,则可以对它进行修改。
注意:
本质上使用
toObject和toJSON都是可以的,其实这两个方法一般来说是没区别的,而如果要讲究区别的话,那就是如果使用toJSON的话,对生成的对象用JSON.stringify,此时用的是这个对象本身的toJSON方法来序列化,而不是原生对象Object的方法。
参考英文:
From the MDN document, if an object has the toJSON property as a function, JSON.stringify will use the toJSON function to serialize the object instead of the object itself.