#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")