Могу ли я выполнить обновление mongoose из промежуточного программного обеспечения после сохранения? - PullRequest
0 голосов
/ 24 августа 2018

Возможно ли обновить документ с поста save mongoose middleware? Потому что это не работает для меня.

Я пробовал по-разному.

Способ 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: потому что он содержит идентификатор сохраненного объекта, поэтому я попытался напрямую.

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 генерируется из автоинкремента mongoose, который требует числового поля. и я также сохраняю строковую версию quoteNumber в поле quoteString, чтобы в пользовательском интерфейсе я мог выполнять поиск регулярных выражений в автозаполнении. Как регулярное выражение не работает с типом числа.

любые предложения будут полезны. Спасибо.

1 Ответ

0 голосов
/ 24 августа 2018

Просто сделайте автоинкрементное поле виртуальным, и вам не придется беспокоиться о перехвате после сохранения ...

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' });
...