Я хочу сохранить все версии моих документов в коллекции. Только последний измененный документ будет идентифицирован атрибутом флага с именем latest=1
const StudentSchema = new Schema({
createdAt: {type: Date, required: true},
lastModifiedAt: {type: Date, required:true}, // last change to student data
latest: {type: Number, required:true, max: 1} // set to 1 only for most recent
//document, all other documents should set to 0
status: {type: String, required: true}
});
module.exports = mongoose.model('Student', StudentSchema);
. Таким образом я вставляю документ в свою коллекцию.
const student = new Student(
{
createdAt: new Date().toISOString(),
lastModifiedAt: new Date().toISOString(),
latest: 1,
status: "pending"
}
)
student.save(function (err, createdStudent) {
if (err) {
return err
}
res.send(createdStudent)
})
Когда я делаю Получить я получаю этот документ.
Student.findById(req.params.id, function (err, fetchedStudent) {
if (err) return err
res.send(fetchedStudent)
})
... Output ...
{
"_id": "5e9c32b9c00f608537c1ac45",
"createdAt": "2020-04-19T11:15:05.693Z",
"lastModifiedAt": "2020-04-19T11:15:05.693Z",
"latest": 1,
"status": "pending",
"__v": 0
}
Теперь я хочу обновить этот документ. Я не могу использовать findByIdAndUpdate()
, так как он не создаст новый документ с новым _id
, когда существует существующий документ для данного _id
.
Если я создаю новый документ с использованием save()
, мне нужно скопировать все мои существующие значения в новую модель Стьюдента и установить latest
, lastModifiedAt
, _v
вручную. Я полагаю, что был бы лучший подход для этого, учитывая многопоточность ios. Любая помощь будет оценена.