Mongoose - Post Hook - 在加载后更改Doc / Model值返回之前

时间:2018-03-07 23:43:19

标签: node.js mongodb mongoose

解决:我只能猜到谵妄让我了。

很抱歉在发布之前没有搞清楚,但这是下一个人的解决方案。 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

〜编辑,因为我解决了自己的问题〜

0 个答案:

没有答案