Как реализовать автоматическое увеличение для mongodb в страпи? - PullRequest
2 голосов
/ 23 июня 2019

я пытался добавить эти плагины mongoose mongoose-auto-increment и mongoose-sequence в страпи в config/functions/mongoose.js .. коллекции счетчиков создаются ... но счетчики последовательности не обновляются .. Есть ли способ получить эти плагины работает или есть способ реализовать это сам?

// config/functions/mongoose.js
var autoIncrement = require('mongoose-auto-increment');

module.exports = (mongoose, connection) => {
  autoIncrement.initialize(mongoose.connection);

  var movieSchema = mongoose.Schema({
    title: String
  }, { collection : 'Tests' });

  movieSchema.plugin(autoIncrement.plugin, { model: 'Test', field: 'movieId', startAt: 1 });
};

1 Ответ

0 голосов
/ 24 июня 2019

В аналогичной ситуации я решил ее, используя новую схему в качестве счетчика для идентификаторов.

Вот схема счетчика (models / counter.js):

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const CounterSchema = Schema({
    _id: {
        type: String,
        required: true
    },
    sequence: {
        type: Number,
        default: 0
    }
}, {
    collection: 'counters'
});

// export the counter model below and call this method to create the first entry in the counter's table
CounterSchema.statics.createFirstIdForMovie = async () => {        
  const newCounter = new counter({
      _id: "movieid",
      sequence: 0
  });
   newCounter.save();
}

ИСхема фильма будет (models / movie.js):

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const MovieSchema = new Schema({
    ...,
    identifier: {
        type: Number,
        required: false,
        unique: true
    },
    ...
});

MovieSchema.pre('save', async function (next) {
    // get the next value for the identifier of 'movieid'
    if (this.identifier) {
        // just editing, don't need to increment or set a new identifier
        return;
    }
    let c = await counter.findById('movieid');
    if (!c) {
        c = await counter.createFirstIdForMovie();
    }
    c.sequence += 1;
    await c.save();
    this.identifier = c.sequence;
});

Надеюсь, это поможет!

...