Документ временных рядов с mongoose node.js ?

#node.js #mongodb #mongoose

#node.js #mongodb #мангуст

Вопрос:

У меня есть схема, подобная приведенной ниже.

 const activePowerSchema = new mongoose.Schema({
  nr: {
type: String,
required: true,
minlength: 2,
maxlength: 50
},

 value: { 
type: [Number],
required: true,
minlength: 0
},

 epoch_timestamp: {
type: Number,
required: true,
minlength: 0
}
});
  

теперь данные должны быть помещены в «значение» в течение 5 минут в документе, а через 5 минут вместо ввода «значения» создается другой документ и вводятся данные в «значение» в течение следующих 5 минут и так далее, например

 {"nr": "test_nr", "epoch_timestamp":"1556114198", "value":[200,300,500,200]} 
  

и через 5 минут появляется новый документ, подобный..

 {"nr": "test_nr", "epoch_timestamp":"1557114198", "value":[1200,2300,5400,1200]} and so on..
  

есть ли что-нибудь в mongoose, или я должен создать логику для проверки времени, если оно меньше 5 минут, затем вставить в массив и через каждые 5 минут новый документ?
большое спасибо

Ответ №1:

Единственное, что приходит мне в голову, это создание новой коллекции, в которой будет только 1 документ:

 const lastEpochSchema = new mongoose.Schema({
    timestamp: { type: Date },
});

module.exports = mongoose.model('LastEpoch', lastEpochSchema);
  

И затем каждый раз, когда вы хотите вставить новый value в activePower , вы просто запрашиваете:

 const lastEpoch = await LastEpoch.findOne();
  

Затем сравните его с текущим Date.now() и, если разница превышает 5 * 1000 (5 секунд), обновите LastEpoch и вставьте новый документ в activePower . Если прошло менее 5 секунд — перенесите значения в текущее, activePower где activePower.epoch_timestamp они будут равны LastEpoch .