#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
.