我要提及的另一个问题是,如果我想在个人资料中显示关注者,followers,savedPost和saveJobs,那么这些问题(关注者,following,savedPost和savedJobs)应该在UseSchema中声明(我已经在其中声明它们)或ProfileSchema(我拥有的另一种模式)*
切换保存路线
const express=require('express');
const router=express.Router();
const Job=require('../../models/Job');
const {check,validationResult}=require('express-validator');
const auth=require('../../middleware/auth');
const User=require('../../models/User');
router.get(':/id/toggleSave',auth,async (req,res)=>{
const job = await Job.findById(req.params.id);
if (!job) {
return res.status(404).json('Post not found')
}
const { user } = req;
if (user.savedJobs.includes(req.params.id)) {
console.log("removing saved post");
await User.findByIdAndUpdate(user.id, {
$pull: { savedJobs: req.params.id },
});
} else {
console.log("saving post");
await User.findByIdAndUpdate(user.id, {
$push: { savedJobs: req.params.id },
});
}
res.json(job);
});
工作模式
const mongoose=require('mongoose');
const Schema=mongoose.Schema;
const JobSchema=new Schema({
user:{
type:Schema.Types.ObjectId,
ref:'User'
},
description:{
type:String,
required:true
},
title:{
type:String,
required:[true,'Please enter title'],
},
tags:{
type:[String],
required:true
},
qualification:{
type:[String],
required:true
},
location:{
type:String,
required:true
},
salary:{
type:Number,
required:true
},
jobpic:{
type:String
},
link:{
type:String
},
reviews:[
{
user:{
type:Schema.Types.ObjectId,
ref:'User'
},
text:{
type:String,
required:true,
},
name:{
type:String
},
avatar:{
type:String
},
date:{
type:Date,
default:Date.now
}
}
],
date:{
type:Date,
default:Date.now
},
expiryDate:{
type:Date
}
})
module.exports=Job=mongoose.model('Job',JobSchema)
用户模型
const mongoose=require("mongoose");
const UserSchema=new mongoose.Schema({
name:{
type:String,
required:true
}
,
email:{
type:String,
required:true,
unique:true
},
password:{
type:String,
required:true,
select:true
},
avatar:{
type:String
},
followers:[{
type:
mongoose.Schema.ObjectId,
ref:'User'
}],
followersCount:{
type:Number,
default:0,
},
followingCount:{
type:Number,
default:0
},
following:[
{
type:mongoose.Schema.ObjectId,
ref:'User'
}
],
posts:[{
type:mongoose.Schema.ObjectId,
ref:'Post'
}],
postCount:{
type:Number,
default:0,
},
savedPosts:[{
type:mongoose.Schema.ObjectId,
ref:'Post'
}],
savedJobs:[{
type:mongoose.Schema.ObjectId,
ref:'Job'
}],
date:{
type:Date,
default:Date.now
},
confirmationToken:{
type:String
}
});
module.exports=User=mongoose.model("User",UserSchema);