NodeJS 过滤器在按类别ID过滤作业的节点js中不起作用

cfh9epnr  于 12个月前  发布在  Node.js
关注(0)|答案(1)|浏览(97)

我正在使用express和mongoDB开发node js。我已经创建了两个模式,一个是jobmodel,另一个是jobTypemodel,一切都与它的路由,控制器和所有,但我已经建立了一个过滤器,过滤作业类别ID,但它没有给出所需的输出。
代码如下:
jobsController.js

exports.showJobs = async (req, res, next) => {
    // enable search
    const keyword = req.query.keyword ? {
        tittle:{
            $regex: req.query.keyword,
            $options: 'i'
        }
    } : {}

    //filter job by category ids
    // it is not working currently
    let ids = [];
    const jobTypeCategory = await JobType.find({},{_id:1})
    jobTypeCategory.forEach(cat => {
        ids.push(cat._id);
    })

    let cat = req.query.cat;
    let categ = cat !== '' ? cat : ids;

     //enable pagination
     const pageSize = 5;
     const page = Number(req.query.pageNumber) || 1;
    //  const count = await Job.find({...keyword}).estimatedDocumentCount();
     const count = await Job.find({ ...keyword, jobType:categ }).countDocuments();
    try {
        const jobs = await Job.find({ ...keyword, jobType:categ }).skip(pageSize * (page-1)).limit(pageSize);
        res.status(200).json({
            success: true,
            jobs,
            page,
            pages: Math.ceil( count / pageSize),
            count,
        })
    } catch (error) {
        next(error);
    }
}

工作路线

const express = require('express');
const router = express.Router();
const { isAuthenticated, isAdmin  } = require('../middleware/auth');
const Job = require('../models/jobModel');
const { singleJob, updateJob, showJobs } = require('../controllers/jobsControllers');

//job  routes
// /api/job/creates
router.post('/job/create', isAuthenticated, isAdmin, async (req, res, next) =>{
    try {
        const job = await Job.create({
            tittle: req.body.tittle,
            location: req.body.location,
            batch: req.body.batch,
            location: req.body.location,
            desc: req.body.desc,
            company: req.body.company,
            jobType: req.body.jobType,
            user: req.user.id
        });
        res.status(201).json({
            success: true,
            job
        })
    } catch (error) {
        next(error);
    }
});

// /api/job/id
router.get('/job/:id', singleJob);
// /api/job/update/:job_id
router.put('/job/update/:job_id',isAuthenticated, updateJob);
// /api/jobs/show
router.get('/jobs/show', showJobs);

module.exports = router;

作业类型模型

const mongoose = require('mongoose');
const { ObjectId } = mongoose.Schema;

const jobSchema = new mongoose.Schema({
    tittle:{
        type: String,
        trim: true,
        required: [true, 'job tittle is required'],
        maxLength: 70,
    },
    batch:{
        type: String,
        trim: true,
        required: [true, 'batch year  is required else write graduate'],
        maxLength: 70,
    },
    location:{
        type: String,
        trim: true,
        required: [true, 'location is required'],
        maxLength: 70,
    },
    desc:{
        type: String,
        trim: true,
        required: [true, 'Discription is required'],
    },
    company:{
        type:String,
        trim:true,
        required: [true, 'Company name is required'],

    },
    jobType: {
        type: ObjectId,
        ref: "JobType",
        required: true
    },
    user: {
        type: ObjectId,
        ref: "User",
        required: true
    }
}, {timestamps:true})

module.exports = mongoose.model("Job", jobSchema);
job type model
const mongoose = require('mongoose');
const { ObjectId } = mongoose.Schema;

const jobTypeSchema = new mongoose.Schema({
    jobTypeName: {
        type: String,
        trim: true,
        required: [true, 'job category is required'],
        maxlength: 70,
    },

    user: {
        type: ObjectId,
        ref: "User",
        required: true
    },

}, {timestamps:true})

module.exports = mongoose.model("jobType", jobTypeSchema);

Postman 给出结果,但不是预期的结果,因为它只给出一个工作岗位,当我运行所有工作的API时,它仍然只显示一个工作在所有条件下,我的搜索工作正常。
注意-如果我从此处从作业控制器中删除jobType:categ

const jobs = await Job.find({ ...keyword, jobType:categ }).skip(pageSize * (page-1)).limit(pageSize);
        res.status(200).json({
            success: true,
            jobs,
            page,
            pages: Math.ceil( count / pageSize),
            count,
        })

则只显示全部作业结果。
我正在开发一个API来按类别过滤作业,但它无法过滤,而在MongoDB的云数据存储,但无法按需获取。

g2ieeal7

g2ieeal71#

如果你的id/categ是一个数组,那么你的查询应该是

{ ...keyword, jobType: { $in: categ } }

相关问题