问题起因:
第一步: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 自带的字段和方法
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