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

如何在Mongoose中按Campaign获取关联Photo集合数据?

解决根据指定Campaign获取对应Photo的问题

看起来你当前的getGallery路由没有正确关联到目标Campaign,导致拉取了所有照片。咱们一步步修复这个问题:

1. 修正路由的参数获取与查询逻辑

你的画廊URL是/photocontestapp/awesome%20baby%20srija/gallery,其中awesome baby srija是Campaign的标题,所以首先需要从req.params中拿到这个标题,找到对应的Campaign文档,再用它的_id去筛选Photo集合的内容。

修改后的getGallery路由如下:

exports.getGallery = (req, res) => {
  // 第一步:通过URL中的标题找到对应的Campaign
  Campaign.findOne({ Campname: req.params.Title }, (err, campaign) => {
    if (err) {
      console.error(err);
      return res.status(500).send('服务器错误');
    }
    if (!campaign) {
      return res.status(404).send('未找到对应的活动');
    }

    // 第二步:用找到的Campaign的_id查询关联的照片
    PhotoEntries.find(
      { CampaignId: campaign._id }, // 正确的查询条件:匹配Photo中的CampaignId
      ['Photo', 'Name', 'Description'], // 按需返回视图需要的字段,可根据需求调整
      { sort: { _id: -1 } },
      (err, photos) => {
        if (err) {
          console.error(err);
          return res.status(500).send('获取照片失败');
        }
        res.render('admin/gallery', { photolist: photos });
      }
    );
  });
};

2. 修复字段名不匹配的隐藏bug

注意到你的Campaign模型里的标题字段是Campname,但在postEntriesCollection路由中你写的是Campaign.findOne({Title:req.params.Title})——这里存在字段名不匹配的问题!如果你的Campaign文档的标题存在Campname字段里,这个查询会找不到对应的Campaign,导致后续CampaignId赋值错误。

你需要统一字段名:要么把Campaign模型里的Campname改成Title,要么把查询条件改成{ Campname: req.params.Title },保证前后逻辑一致。

3. 确认路由参数配置正确

你的Express路由需要正确定义参数,才能让req.params.Title拿到URL中的活动标题,示例如下:

// 假设你的路由前缀是/photocontestapp
router.get('/photocontestapp/:Title/gallery', yourController.getGallery);

这样修改后,就能精准拉取指定Campaign对应的所有照片,渲染到画廊页面了。

内容的提问来源于stack exchange,提问作者pralayasimha Yedida

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:32:30