Ошибка типа: course.populate не является функцией - PullRequest
1 голос
/ 12 апреля 2020

Итак, у меня есть две схемы, а именно курс и кт. Код обеих схем приведен ниже. Схема курса

const validator=require('validator');

let Schema=new mongoose.Schema({
    coursename:{
        type:String,
        unique:true,
        required:true,
        validate(value){
            if(!validator.isAlphanumeric(value))
                throw new Error("Enter a valid course name");
        }
    }
})

Schema.virtual('ct',{
    ref:'Ct',
    localField:'_id',
    foreignField:'courseid'
});

Schema.virtual('finalpaper',{
    ref:'Finalpaper',
    localField:'_id',
    foreignField:'courseid'
})

let Course=mongoose.model('Course',Schema);

module.exports=Course;

Ct Schema

const mongoose=require('mongoose');

let Schema=new mongoose.Schema({
    file:{
        type:Buffer,
        required:true
    },
    filename:{
        type:String,
        required:true
    },
    courseid:{
        type:mongoose.Schema.Types.ObjectId,
        ref:'Course'
    }
},{
    timestamps:true
})

let Ct=mongoose.model('Ct',Schema);

module.exports=Ct;

Теперь, когда я вызываю router.get (), я впервые инициализирую переменную курса в схеме курса. и я вызываю course.populate, где я получаю сообщение об ошибке.

TypeError: course.populate - это не функция, которой я занимался в течение нескольких часов, но не могу понять проблему. Я не знаю, если код Правильно, или я думаю, что я использую функцию заполнения неправильно.

userRouter. js

router.get('/course/:course/ct',async(req,res)=>{

    var match={};
    var sort={}
    if(req.query.sortBy){
        part=req.query.sortBy.slice(':');
        sort[part[0]]=part[1]==='desc'?-1:1
    }

    try{
        let course=await Course.find({coursename:req.params.course});
        await course.populate({
            path:'ct',
            match,
            options:{
                limit:req.query.limit,
                skip:req.query.skip,
                sort
            }
        }).execPopulate();
        course.ct.forEach(Deletefile);
        res.send(course.ct);
    }catch(e){
        console.log(e);
        res.status(500).send(e.toString());
    }
})

1 Ответ

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

Ваша проблема связана с тем, как вы цепляетесь. Course, а не course, имеет функцию заполнения. Поэтому вы должны связать это так:

let course=await Course.findOne({coursename:req.params.course}).populate({
            path:'ct',
            match,
            options:{
                limit:req.query.limit,
                skip:req.query.skip,
                sort
            }
        }).execPopulate();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...