[Mongoose] Schema.Types.Mixed のフィールドに Error オブジェクトを保存する
Mongoose の Schema.Types.Mixed のフィールドに Node.js の Error オブジェクトをそのままだと保存できなかったので、toString() や _.toPlainObject() して保存したというお話です。
var err = new Error('bad');
Model.updateOne({
_id: targetId
}, {
'mixedField': err ? err.toString() : null
}, function(updatedErr) {
});
var err = new Error('good');
Model.updateOne({
_id: targetId
}, {
'mixedField': err ? err.toString() : null
}, function(updatedErr) {
});
const _ = require('lodash');
var err = new Error('good');
Model.updateOne({
_id: targetId
}, {
'mixedField': err ? _.toPlainObject(err) : null
}, function(updatedErr) {
});
MongoDB に Error オブジェクトが保存されてなくて悩んだのですが MongoDB の LogLevel の設定を変更して、確認したところ、そもそも update method に値が渡っていませんでした。
Schema.Types.Mixed のフィールドにはなんでも保存できると思っていたのですが、Mongoose のレイヤーで Error オブジェクトは cast してくれず、何も保存されないという処理になっているようでした。
Mongoose のソースコードまでは未だ読めてないので、後ほど読んでみたいと思います。