ошибка nodejs mongoose TS2551: свойство ‘IsDeleted’ не существует для типа ‘Document’. Вы имели в виду ‘$IsDeleted’

#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 константы.