解决:我只能猜到谵妄让我了。
很抱歉在发布之前没有搞清楚,但这是下一个人的解决方案。 try / catch不是必需的,但它确实帮助我找出了一些没有打印到控制台的错误。如果有更好的方法来记录解决我自己的问题,我会很感激反馈。
旧问题
我在我的mongo db中存储了我想要修改的文档,然后返回到find()或findOne()。我想这样做而不改变所有查找变体的值和单个钩子。称之为掩蔽。我实际上是将数值标准化为0到1的比例。我不想修改doc中的值,只需在通过find,findOne返回doc时更改值。例如。 “在Mongoose中加载后更改模型值”
解决方案
schema.post('init', function(doc){
try{
console.log(doc); // prints the doc to console, complete
doc.property = "new property value"; // changes the document value
console.log(doc); // returns the modified document
return doc;
}
catch(error){
console.log(error);
}
}
旧笔记
其他线程注意post init钩子的用法。我已经尝试了以下相关主题中的方法但没有成功。
Mongoose - how to tap schema middleware into the 'init' event?
Change Model values after load in Mongoose(此方法已随5.x更改)
schema.post('init', function(doc){
console.log('Tell me i fired'); // works, prints to console
console.log(doc); // works, prints full model to console
doc.valueField = doc.valueField2+doc.valueField3; // fails, no doc returned, throws no errors
});
schema.post('init', function(doc, next){
console.log('Tell me i fired'); // works, prints to console
console.log(doc); // works, prints full model to console
doc.valueField1 = doc.valueField2+doc.valueField3; // fails, no doc returned, throws no errors
next();
});
我已经尝试添加return(doc);,doc.save()以及上面代码的每个变异,我可以在我缩小的心理能力中编译。我一直在墙上扔垃圾,没有任何东西粘在上面。 documentation over at mongoose很差,行为随着版本5.x而改变,删除了Asynch回调(删除了next())。
这是在mongoose上提交的错误,其中注明了next()的删除。 https://github.com/Automattic/mongoose/issues/6037
从5.x版本发布说明 https://github.com/Automattic/mongoose/blob/master/migrating_to_5.md#init-hook-signatures
〜编辑,因为我解决了自己的问题〜