我們在使用Mongoose的時候,或許大家都會發(fā)現(xiàn)回調(diào)返回的result無法進(jìn)行修改,Google了一下,現(xiàn)把方法記錄下來供有需要的同學(xué)參考一下。
代碼我就不貼了,能遇到這個問題的人說明對mongoose語法都是有一定了解的了,那么下面就直接說這種現(xiàn)象的原因。
實際上
mongoose返回的數(shù)據(jù)并不是object,雖然通過typeof判斷類型是Object,但其實mongoose自己封裝的一個對象,并且這個對象會對數(shù)據(jù)進(jìn)行實時查詢以保證其符合預(yù)定義的model,而無論添加刪除model都不會改變,所以設(shè)置無效。
那解決的方法是:
在返回的result對象調(diào)用
toObject()或toJSON()方法,則可以對它進(jìn)行修改。
注意:
本質(zhì)上使用
toObject和toJSON都是可以的,其實這兩個方法一般來說是沒區(qū)別的,而如果要講究區(qū)別的話,那就是如果使用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.