#node.js #mongodb #express #mongoose
#node.js #mongodb #выразить #mongoose
Вопрос:
Я пытаюсь обновить поле в документе и сохранить экземпляр.
Но я получаю это сообщение об ошибке:
error TS2551: Property 'isDeleted' does not exist on type 'Document'. Did you mean '$isDeleted'
Модель:
import * as mongoose from "mongoose";
const RambleSchema = new mongoose.Schema({
title: {
type: String,
required: true
},
imageUrl: {
type: String,
default: 'https://static.wixstatic.com/...'
},
date: {
type: Date,
default: Date.now
},
pdfLink: {
type: String,
required: true
},
isArchived: {
type: Boolean,
default: false
},
isDeleted: {
type: Boolean,
default: false
}
});
const Ramble = mongoose.model('Rambles', RambleSchema);
export default Ramble;
Контроллер:
private deleteMorningRambles = async (request: Request, response: Response, next: NextFunction) => {
try {
const { id } = request.params;
const ramble = await Ramble.findById(id);
if (ramble == null) {
return response.status(404).json({ message: "Cannot find ramble" });
}
ramble.isDeleted = true; // here is the issue
await ramble.save();
response.status(200).send({ status: "success" });
} catch (error) {
next(error);
}
}
Я что-то здесь упускаю?
Комментарии:
1. Разве вызов
mongoose.model
не должен быть общим?
Ответ №1:
Это похоже на typescript
ошибку, а не на mongoose
ошибку.
вы определили свою схему следующим образом
const Ramble = mongoose.model('Rambles', RambleSchema);
и вы не определили тип для своей Ramble
модели, следовательно, typescirpt определяет его для вас с помощью универсального типа Document
.
Итак, в этой строке const ramble = await Ramble.findById(id);
когда вы пытаетесь получить доступ к findById() из вашей Ramble
модели, он возвращает ответ в вашей ramble
константе, который также получит document
тип. Следовательно, это даст вам эту ошибку.
Итак, чтобы избежать этого, вы можете либо определить определенный тип для своей Ramble
модели, либо для быстрого исправления назначить тип any
для вашей ramble
константы.