Не удается обновить документ в MongoDB

#javascript #mongodb

Вопрос:

Поэтому я пытаюсь просто обновить документ в своей базе данных, у меня не было проблем с получением данных из базы данных. Вот мой код:

 const mongoose = require("mongoose");
    mongoose.connect("mongodb://localhost/mongo-exercises", {
      useNewUrlParser: true,
      useUnifiedTopology: true,
    });

//Creating Schema
const courseSchema = new mongoose.Schema({
  tags: [String],
  date: Date,
  name: String,
  author: String,
  isPublished: Boolean,
  price: Number,
});

//Creating model which returns a Class
const Course = mongoose.model("courses", courseSchema);


async function updateData(id) {
  try {
    const course = await Course.findById(id);

    course.isPublished = true;
    course.author = "another author";

    const resulti = await course.save();
    console.log(result);
  } catch (error) {
    console.log(error.message);
  }
}
updateData("5a68fdf95db93f6477053ddd");
 

Ошибка, которую я получаю:

 Cannot set property 'isPublished' of null
 

Любые указатели приветствуются заранее, спасибо:)

Комментарии:

1. Я думаю, что вы должны указать значение по умолчанию «false» в поле «IsPublished».

2. При поиске курса идентификатор не может быть найден. Поэтому он возвращает значение null.

3. Чтобы уточнить: При поиске курса документ с удостоверением личности не может быть найден. Поэтому он возвращает значение null. Это не ошибка и не остановит вашу функцию там. Таким образом, он ошибается при установке свойства на null.

4. Да, в этом есть смысл. Но как мне это отладить? Я могу буквально получить данные из базы данных, используя ту же самую модель, консоль. зарегистрируйте это и скопируйте оттуда один из идентификаторов. По-прежнему не работает.

5. Вместо этого я попытался использовать updateOne, а затем установил третий параметр, upsert:true. Поэтому, если он не найдет идентификатор, он должен его создать. И это произошло. Итак, теперь у меня есть два идентификатора, которые выглядят следующим образом: _ id:ObjectId(«5a68fdd7bee8ea64649c2777″) _id:»5a68fdd7bee8ea64649c2777» Итак, теперь код в этом посте работает. Однако он обновляет _id с прежним форматированием, что мне не нужно, так как все мои идентификаторы формируются как последняя версия

Ответ №1:

Я нашел решение, база данных, которую я использовал, имела устаревшее форматирование для идентификаторов:s.

 //In my database
_id: "5a68fdd7bee8ea64649c2777"

//How it should look
_id: ObjectID("5a68fdd7bee8ea64649c2777")