You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose+Node.js:如何查询关联集合中符合职位条件的申请人?

问题分析与解决方法

你的写法确实存在错误。Applications集合中的jobID字段存储的是Jobs集合文档的_id(ObjectId类型),并非包含title字段的嵌套对象,所以直接通过"jobID.title"进行查询无法匹配到任何数据。

下面提供两种可行的解决方式:

方式一:使用MongoDB聚合查询($lookup)

通过聚合管道关联Applications和Jobs两个集合,先建立关联再筛选符合条件的数据:

Applications.aggregate([
  // 关联Jobs集合,获取对应职位信息
  {
    $lookup: {
      from: "jobs", // 目标集合名称(注意是MongoDB中的集合名,不是Mongoose模型名)
      localField: "jobID", // Applications中用于关联的字段
      foreignField: "_id", // Jobs中用于关联的字段
      as: "jobDetails" // 关联结果存储的字段名
    }
  },
  // 筛选职位标题为"5+ Y Engineer"的申请
  {
    $match: {
      "jobDetails.title": "5+ Y Engineer"
    }
  },
  // 按需选择返回的字段,比如只保留申请人信息
  {
    $project: {
      applicant: 1,
      _id: 1
    }
  }
])
.then(results => console.log(results))
.catch(err => console.error(err));

方式二:使用Mongoose的populate(需提前定义Schema关联)

如果已经在Mongoose中为两个集合定义了关联关系,可以用populate简化查询:

首先定义Jobs和Applications的Schema:

const mongoose = require('mongoose');

// Jobs集合Schema
const jobSchema = new mongoose.Schema({
  title: String
});
const Job = mongoose.model('Job', jobSchema);

// Applications集合Schema,关联Job模型
const applicationSchema = new mongoose.Schema({
  applicant: String,
  jobID: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Job' // 指定关联的Mongoose模型
  }
});
const Application = mongoose.model('Application', applicationSchema);

然后执行查询:

Application.find()
// 关联jobID字段,并筛选职位标题匹配的记录
.populate({
  path: 'jobID',
  match: { title: '5+ Y Engineer' }
})
// 过滤掉未匹配到对应职位的申请记录
.where('jobID').ne(null)
// 选择需要返回的字段
.select('applicant _id')
.then(results => console.log(results))
.catch(err => console.error(err));

内容的提问来源于stack exchange,提问作者saurabh gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 12:42:03