CNode

(已解决)如何取 mongoose Schemas 自定义的值 不带里面的静态方法

问答
Cchenjiyong发布于10 年前最后回复10 年前5 回复5240 浏览0 收藏

问题起因: 第一步: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)

O
o6875461#1·10 年前

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

来自酷炫的 CNodeMD

C
chenjiyong#2·10 年前
引用 o6875461merge把b放在前面 使用 doc/toJson()进行merge 来自酷炫的 CNodeMD

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

C
chenjiyong#4·10 年前
A
aojiaotage#5·10 年前

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

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

参与回复
登录后即可参与回复。登录