是否可以从save
发布的猫鼬中间件中更新文档?因为它对我不起作用。
我尝试了不同的方式。
方法1:
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中可以自动完成正则表达式搜索。由于正则表达式不适用于数字类型。
任何建议都会有所帮助。谢谢。
答案 0 :(得分:0)
只需将自动递增字段设置为虚拟,就不必担心后保存挂钩...
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' });