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

如何从已查询的广告集合关联获取对应公司文档?

解决方法:关联广告与公司数据

你可以通过两种方式实现广告数据与对应公司数据的关联查询,下面分别说明:

方法一:使用Mongoose的populate(推荐)

这是Mongoose专为关联集合设计的便捷功能,需要先修正Schema并建立关联关系:

1. 修正Schema并定义关联

你的adsSchema中companyId类型为String,但companies集合的_id是Number,类型不匹配会导致关联失败,先修正类型并添加ref关联:

// 先定义公司Schema和Model
const companiesSchema = mongoose.Schema(
  {
    _id: Number,
    name: String,
    url: String,
  }
);
const CompanyModel = mongoose.model("company", companiesSchema);

// 修正广告Schema,添加关联
const adsSchema = mongoose.Schema(
  {
    _id: Number,
    companyId: { 
      type: Number, // 改为与companies._id一致的Number类型
      ref: "company" // 关联到company集合的Model
    },
    primaryText: String,
    headline: String,
  }
);
const AdsModel = mongoose.model("ad", adsSchema);

2. 执行关联查询

查询广告时,通过populate方法自动拉取对应的公司数据:

let prods = await AdsModel.find({
  primaryText: { $regex: keyword, $options: "i" },
}).populate("companyId"); // 指定要关联的字段,自动替换为对应公司文档

// 返回结果示例:
// [
//   {
//     _id: 1,
//     companyId: { _id: 3, name: "Salesforce", url: "http://salesforce.com/" },
//     primaryText: "...",
//     headline: "..."
//   },
//   ...
// ]

方法二:手动关联查询

如果不想修改Schema,也可以分两步手动实现关联:

1. 查询符合条件的广告

let prods = await AdsModel.find({
  primaryText: { $regex: keyword, $options: "i" },
});

2. 提取companyId并查询对应公司

注意统一类型(将companyId转为Number,匹配companies的_id类型):

// 提取所有广告的companyId,去重并转为Number类型
const companyIds = [...new Set(prods.map(ad => Number(ad.companyId)))];

// 查询对应的公司数据
const companies = await CompanyModel.find({ _id: { $in: companyIds } });

// 合并公司数据到广告对象(按需调整结构)
const adsWithCompanies = prods.map(ad => {
  const company = companies.find(c => c._id === Number(ad.companyId));
  return {
    ...ad.toObject(),
    company: company || null // 添加company字段存储对应公司文档
  };
});

注意事项

  • 必须保证companyId的类型与companies._id一致,否则关联会失败(你的示例中ads的companyId是数字,但Schema定义为String,需修正)。
  • 使用populate时,ref的值要与公司Model的名称一致(即mongoose.model("company", ...)中的第一个参数)。

内容的提问来源于stack exchange,提问作者Aniket Pandey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:45:08