версия с автоинкрементом в создании документа mongoose - PullRequest
1 голос
/ 04 августа 2020

Я хочу, чтобы при создании нового документа поле versionKey (__v) автоматически увеличивалось.

(или мне следует использовать новое поле version вместо __v в схеме?)

пример схемы в моем приложении:

Template. js

var mongoose = require('mongoose');
const Test = require('./Test');

var TemplateSchema = new mongoose.Schema({
  platform: String,
  templateRevision: String,
  tests: [Test.schema]
});

TemplateSchema.pre('save', function(next) {
  this.increment();
  return next();
});

module.exports = mongoose.model('Template', TemplateSchema);

routes / templatesApi. js

// create new template document
router.post('/', function(req, res, next) {
    Test.create(req.body, function (err, tests) {
        if (err) {
            console.log(err);
            return next(err);
        }
        res.json(tests);
    });
});

где и как я могу вставить здесь операцию автоматического увеличения для свойства versionKey?

Изменить: я пытался использовать .pre('save') промежуточное ПО, но оно все еще не работает.

я правильно использую?

1 Ответ

0 голосов
/ 04 августа 2020

Настроить имя ключа __v

Да, мы можем изменить __v имя ключа по умолчанию на любое другое versionKey

var TemplateSchema = new mongoose.Schema(
  {
    platform: String,
    templateRevision: String,
    tests: [Test.schema]
  },
  { versionKey: 'version' }
);

Версия с автоматическим приращением

ниже промежуточное ПО будет вызывать перед операцией и обновлять инкрементную версию,

  • Увеличение, когда save(), this относится к документу объекту
TemplateSchema.pre('save', function(next) {
    this.increment();
    return next();
});
  • приращение, когда updateMany(), this относится к запросу объекту
TemplateSchema.pre('updateMany', function(next) {
    this.updateMany({}, { $inc: { version: 1 } });
    return next()
});

Таким же образом вы можете создать промежуточное ПО для других методы update(), updateOne(), findOneAndUpdate(), findAndModify() и et c.

  • мы работаем в файле Template. js, и, наконец, вам нужно создать модель для схема и экспорт, которые вы уже сделали.
module.exports = mongoose.model('Template', TemplateSchema);

Примеры

  • загрузка моделей
const Template = require('./Template'); // manage path of Template.js
  • найти один и сохранить
let doc = Template.findOne({ _id: "5f299bdbf045394388fc1461" });
doc.platform = "test platform";
doc.save(); // before this, `save` middleware will call and auto increment version by 1
  • обновить несколько документов
Template.updateMany(
    { platform: "test platform" },
    { $set: { platform: "demo platform" } }
);
// before this, `updateMany` middleware will call and increment version by 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...