node.js - 如何使用依赖于使用 Node.js 和 Mongoose 的另一个文档的动态变量来过滤文档?

标签 node.js mongodb typescript express mongoose

此时我有点卡住了...我需要向文档添加一个新属性,该属性会根据同一文档的值和另一个文档的值而变化。我举个例子让它更好理解。

我有一个候选模式:

const CandidateSchema: Schema<ICandidate> = new Schema({
    role: {type: String},
    yearsOfExperience: {type: Number},
    compatibility: {type: Number} // Dynamic prop
});

还有一个工作模式

const JobSchema: Schema<IJob> = new Schema({
    title: {type: String},
    postDate: {type: String},
    requirements: {
      role: {type: String},
      yearsOfExperience: {type: Number}
    }
});

现在我需要根据候选人的值和引用工作向候选人的“兼容性”属性添加一个新值。这个新属性将是候选人与工作要求之间的兼容性。在某些情况下,我将需要根据兼容性属性找到 Candidates。

提前谢谢你。

最佳答案

我想你需要的是 pre hook on save ,在这种情况下是这样的:

    CandidateSchema.pre('save', async function() {
      if(this.isModified('someothervalue'){
      const job = await JobSchema.find({'related job query'});
      this.compatibility = job.somevalue + this.someothervalue; //this is your current candidate
    }
    });

JobSchema.post('save', async function(job) {
      const candidates = await CandidateSchema.find({'related candidates query'});
      const candidateUpdates = [];
      candidates.forEach(candidate => {
          candidate.compatibility = job.somevalue + candidate.someothervalue; //this is your current candidate
          candidateUpdates.push(candidate.save());
    })
      await Promise.all(candidateUpdates);
    });

处理上述内容可能很多,但基本上意味着当您更新职位时,所有相关用户(“相关候选人查询”)都会在职位更新之后得到更新(通常您将只需要检查影响用户兼容性的字段是否更改,但这是另一回事),并且第一个 Hook 只是更新用户的兼容性当他的字段影响它更新(如 someothervalue)。

关于node.js - 如何使用依赖于使用 Node.js 和 Mongoose 的另一个文档的动态变量来过滤文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65088284/

相关文章:

arrays - 在查询嵌套对象中的字段和字段时设置条件

Node.js 路径错误

node.js - NodeJS 安装程序不会在 Vista 上打开

javascript - 如何根据数据动态创建 Bootstrap 下拉列表

node.js - 如何使用多个动态键更新mongodb?

node.js - 在大型 Mongo 集合中,如何使用 mongoose 仅​​检索 ID(或任何其他特定属性)?

java - 在 Mongodb 中使用正则表达式

angular - angular 2 中的类型是什么?

class - TypeScript "use"/类的别名

typescript :实现转换器以在运行时访问类型