我可以从 post save 中间件执行 mongoose 更新吗?
Posted
技术标签:
【中文标题】我可以从 post save 中间件执行 mongoose 更新吗?【英文标题】:Can I perform mongoose update from post save middleware? 【发布时间】:2019-01-31 01:19:43 【问题描述】:是否可以从save
mongoose 中间件的帖子中更新文档?因为它不适合我。
我尝试过不同的方法。
方式一:
QuoteSchema.post('save', function(doc)
if (doc.quoteString)
return;
this.quoteString = doc.quoteNumber + "";
this._doc.quoteString = doc.quoteNumber + "";
// update the record with quoteString
this.update( _id: this.id , this, new: true , function(err, result)
if (!err)
console.log("Document Updated");
);
console.log('post save', doc.quoteString);
);
方式2:因为里面包含了保存的对象id所以直接试了。
QuoteSchema.post('save', function(doc)
if (doc.quoteString)
return;
this.quoteString = doc.quoteNumber + "";
this._doc.quoteString = doc.quoteNumber + "";
enter code here
// update the record with quoteString
this.update(function(err)
if (!err)
console.log("Document Updated");
);
console.log('post save', doc.quoteString);
);
方式3:
QuoteSchema.post('save', function(doc)
if (doc.quoteString)
return;
var _quoteString = doc.quoteNumber+"";
this.update( _id: doc._id , $set: "quoteString": _quoteString , function(err)
if (!err)
console.log("Document Updated");
);
console.log('post save', doc.quoteString);
);
这些方法都不适合我。
我所要做的就是在保存后更新 QuoteNumber 字段。 QuoteNumber 是从需要数字字段的猫鼬自动增量生成的。我还在 quoteString 字段中保存了 quoteNumber 的字符串版本,以便在 UI 中,我可以在自动完成中执行正则表达式搜索。由于正则表达式不适用于数字类型。
任何建议都会有所帮助。谢谢。
【问题讨论】:
【参考方案1】:只需将自动增量字段设为虚拟,您就不必担心保存后挂钩...
const QuoteSchema = new Schema(
quoteNumber: type: Number ,
quoteString: type: String ,
,
);
QuoteSchema.virtual('quote').set(function(value)
this.quoteNumber = Number(value);
this.quoteString = String(value);
);
QuoteSchema.virtual('quote').get(function()
return this.quoteNumber;
);
设置:
QuoteSchema.plugin(autoIncrement.plugin, model: 'Quote', field: 'quote' );
【讨论】:
以上是关于我可以从 post save 中间件执行 mongoose 更新吗?的主要内容,如果未能解决你的问题,请参考以下文章
从 django post save 信号产生一个线程可以吗?
何时在 django 中使用 pre_save、save、post_save?
ngResource 在 $save() 之后从 POST 响应中检索唯一 ID
Django 从 post_save 信号访问 ManyToMany 字段
django事务中发信号怎么保证post save执行时数据已经写入数据库
如何使用 Django 信号(Pre_save,Post_save)从“B”模型的 ImageField 设置“A”模型的 ImageField