Пн goose: Как отменить выбор поля и по-прежнему использовать его для расчета виртуального - PullRequest
0 голосов
/ 23 апреля 2020

Итак, я изучаю mongodb & mon goose, и я пытаюсь создать приложение для проектов / задач, это ProjectModel:

    const projectSchema = new mongoose.Schema(
    {
        name: {
            type: String,
            required: true,
            unique: true,
            trim: true,
            lowercase: true,
        },
        grp: {
            type: String,
            required: true,
            trim: true,
            lowercase: true,
        },
        tasks: {
            type: [taskSchema],
        },
        createdAt: { type: Date, default: Date.now },
    },
    {
        toObject: { virtuals: true },
        toJSON: { virtuals: true },
    }
);

projectSchema.virtual('tasksCount').get(function () {
    return this.tasks.length;
});

И при запросе данных запускается:

getAllProjects = async (req, res) => {
    try {
        const query = await Project.find().select({tasks: -1});
        const projects = query.;

        console.log(projects);

        res.status(200).send({
            status: 'sucess',
            data: {
                projects,
            },
        });
    } catch (error) {
        res.status(400).send({
            status: 'fail',
            msg: `error info : ${error}`,
        });
    }
};

Проблема : я получаю эту ошибку: Ошибка типа: Не удается прочитать свойство 'длина' из неопределенного. Это происходит из виртуального свойства ('tasksCount'), поэтому, когда я отменяю выбор свойства ('tasks'), виртуальное свойство не может быть рассчитано, я надеюсь, что у кого-то есть способ отменить выбор 'tasks' и при этом иметь возможность отправить 'tasksCount'.

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете следовать этому коду

 const query = await Project.find().select("-tasks");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...