我正在使用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的云数据存储,但无法按需获取。
1条答案
按热度按时间g2ieeal71#
如果你的id/categ是一个数组,那么你的查询应该是