(已解决)如何取 mongoose Schemas 自定义的值 不带里面的静态方法
发布于 8 年前 作者 chenjiyong 3870 次浏览 来自 问答

问题起因: 第一步:let a = User.findOne({_id: aId}); // a = {aa: ‘aa’, bb: ‘bb’} 第二步:let b = User.findOne({_id: bId}); // b = {bb: ‘cc’, dd: ‘dd’} 第三步: b = lodash.merge(a, b) // b = {aa: ‘aa’, bb: ‘cc’, dd: ‘dd’} 第四步:b.save() // b= {bb: ‘cc’, dd: ‘dd’} 问题说明: 因为 b 被merge 后 里面的静态方法 和 prototype 和 a 的混在一起 导致 b.save() 后并没有 改变 因为线上 Schemas 字段比较多,不能一个个挑出来,有什么办法能取出 b 里面我在 schemas 定义的纯净的值 而不带 proto 和 mongodb 自带的字段和方法

5 回复

merge把b放在前面 使用_doc/toJson()进行merge

来自酷炫的 CNodeMD

@o6875461 _doc/toJson()是什么意思 我是想 b 去覆盖 a 的值 只能merge 把 a 放前面 主要是能取到 schemas 定义的纯净的值 而不带 proto 和 mongodb 自带的字段和方法原型

@chenjiyong _.merge(a,b.toJson()) or _.merge(a, b._doc)

来自酷炫的 CNodeMD

@o6875461 非常感谢完美解决我的问题

mongoose 里取出的对象可以用 toObject方法变为普通对象,不带schema里面的值,但是存的时候要用Model的save方法做,不能用这个对象的静态方法,因为已经没有了

http://mongoosejs.com/docs/api.html#document_Document-toObject

回到顶部