关于mongoose返回的数据无法修改的原因以及解决方法

我们在使用Mongoose的时候,或许大家都会发现回调返回的result无法进行修改,Google了一下,现把方法记录下来供有需要的同学参考一下。

代码我就不贴了,能遇到这个问题的人说明对mongoose语法都是有一定了解的了,那么下面就直接说这种现象的原因。

实际上mongoose返回的数据并不是object,虽然通过typeof判断类型是Object,但其实mongoose自己封装的一个对象,并且这个对象会对数据进行实时查询以保证其符合预定义的model,而无论添加删除model都不会改变,所以设置无效。

那解决的方法是:

在返回的result对象调用toObject()toJSON()方法,则可以对它进行修改。

注意:

本质上使用toObjecttoJSON都是可以的,其实这两个方法一般来说是没区别的,而如果要讲究区别的话,那就是如果使用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.

推荐阅读更多精彩内容