如何使用依赖于使用Node.js和mongoose的另一个文档的动态变量筛选文档?

如何使用依赖于使用Node.js和mongoose的另一个文档的动态变量筛选文档?,node.js,mongodb,typescript,express,mongoose,Node.js,Mongodb,Typescript,Express,Mongoose,我在这一点上有点卡住了。。。我需要向文档添加一个新属性,该属性根据同一文档的值和另一文档的值而变化。我树立了一个榜样,让人们更好地理解它 我有一个候选模式: const CandidateSchema: Schema<ICandidate> = new Schema({ role: {type: String}, yearsOfExperience: {type: Number}, compatibility: {type: Number} // Dynami

我在这一点上有点卡住了。。。我需要向文档添加一个新属性,该属性根据同一文档的值和另一文档的值而变化。我树立了一个榜样,让人们更好地理解它

我有一个候选模式:

const CandidateSchema: Schema<ICandidate> = new Schema({
    role: {type: String},
    yearsOfExperience: {type: Number},
    compatibility: {type: Number} // Dynamic prop
});
const CandidateSchema:Schema=新架构({
角色:{type:String},
经验年份:{type:Number},
兼容性:{type:Number}//Dynamic prop
});
和一个工作模式

const JobSchema: Schema<IJob> = new Schema({
    title: {type: String},
    postDate: {type: String},
    requirements: {
      role: {type: String},
      yearsOfExperience: {type: Number}
    }
});
const JobSchema:Schema=newschema({
标题:{type:String},
发布日期:{type:String},
要求:{
角色:{type:String},
经验年份:{type:Number}
}
});
现在,我需要在候选者的“兼容性”属性中添加一个基于候选者和参考作业的值的新值。这个新特性将是候选人和工作要求之间的兼容性。在某些情况下,我需要根据兼容性属性查找候选项


提前谢谢。

我想您需要的是a,在这种情况下,类似于:

CandidateSchema.pre('save',异步函数(){
if(this.isModified('someothervalue')){
const job=await JobSchema.find({'related job query'});
this.compatibility=job.somevalue+this.someothervalue;//这是您当前的候选人
}
});
JobSchema.post('save',异步函数(作业){
const candidates=wait CandidateSchema.find({'related candidates query'});
常数候选更新=[];
候选人。forEach(候选人=>{
candidate.compatibility=job.somevalue+candidate.someothervalue;//这是您当前的候选人
candidateUpdates.push(candidate.save());
})
等待承诺。所有(候选人更新);
});

处理上述内容可能需要很多,但基本上意味着当您更新作业时,所有相关用户(“相关候选人查询”)都会在更新作业后得到更新(通常仅当影响用户
兼容性的字段发生更改时,您才需要进行检查,但这是另一回事),第一个钩子只会在用户影响它的字段更新时更新用户的
兼容性
(比如
someothervalue
).

我不知道这是否是我正在寻找的…例如,我可以使用pre-hook查找按兼容性筛选的作业?我需要在查询DB以查找候选人或作业时包含此新属性。是的,在
const job=wait JobSchema.find({related job query'})中;
您可以放置任何您想要的查询对象。因此,无论何时更新当前用户,您都可以获得进行计算所需的作业数据以及当前用户的数据。当然,要考虑到您需要执行
保存()
在文档上,而不是findAndUpdate或类似内容。关系不太清楚。能否添加示例候选人和职务文档,以说明“新值”是如何“基于候选人和参考职务的值”的.这个例子本身看起来有点混乱。很难想象一个应聘者只有一个角色和经验。在工作方面,有多重“要求”暗示它是一个数组,您是否可以确认它不是。您可以使用
$lookup
计算每个应聘者的职位匹配数和工作年限。不确定您的其他问题
在某些情况下,我需要根据兼容性属性查找应聘者。
-这是否意味着您也希望保持一致兼容性属性,并可能随着作业的来来去而更新?