Создать новый документ при обновлении с инкрементным номером версии - Mongoose - PullRequest
0 голосов
/ 19 апреля 2020

Я хочу сохранить все версии моих документов в коллекции. Только последний измененный документ будет идентифицирован атрибутом флага с именем 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. Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...