Как вывести данные коллекции фотографий из коллекции кампании в пн goose? - PullRequest
0 голосов
/ 09 мая 2020
I have 3 collections in mongoose. one is campaign collection that reference to user and other one is photo collection that reference to campaign collection. I can pull the campaigns data based on user but not able fetch photos based on campaigns. Here One user might have many campaigns and each campaign has their own photo collections.

 My models :

**Photo collection:**

var photoSchema = new Schema({
    Name: {type: String},

    Email:  { type: String },

    Photo:  { type: String },
    Description:{type:String},

    PhoneNumber:{type:String},
    CampaignId: { 
      type: Schema.Types.ObjectId, 
      ref: 'Campaigns', 
    } 

  });

Это коллекция кампании, которая ссылается на пользователя. Это снова ссылка из коллекции фотографий. Я хочу сделать фотографии одной кампании в галерее. Название кампании отправляется как параметры в URL-адресе, но невозможно понять, как это сделать.

Маршрут публикации для сбора фотографий:

exports.postEntriesCollection = (req, res) => {

Campaign.findOne({Title:req.params.Title}, function(err, campaign) {

let filename = '';


if(!isEmpty(req.files)) {
    let file = req.files.file;
    filename = file.name;
    let uploadDir = './public/PhotoContestUploads/uploads/';
    console.log(filename);
    file.mv(uploadDir+filename, (err) => {
        if (err)
            throw err;
    });
}


const photo = new PhotoEntries({

  Email:req.body.email,
  Name:req.body.name,
  Description:req.body.description,
  Phonenumber:req.body.Phone, 
  CampaignId:campaign._id,
  Photo:`uploads/${filename}`
});
 photo.save().then(post => {

  req.flash('success', { msg: 'Uploaded successfully' });
     res.redirect('#');

 });
});

}

**campaign collection:**

var campaignSchema = new Schema({
    Campname: {type: String},
     userId: { 
      type: Schema.Types.ObjectId, 
      ref: 'User', 
    } 

  });


****To render gallery my route like this :**  I try to pull photos using campaign ID stored in photos collection here :** 

exports.getGallery = (req, res) => {
 PhotoEntries.find({req.CampaignId}, ['Photo'], {sort:{ _id: -1} }, function(err, photos) {
    res.render('admin/gallery', {  photolist : photos }); 
  });
}


I am not able to get gallery of particular campaign instead i am getting all photos relating all campaigns. I want to show only gallery of particular campaign. I have gallery url like this :  /photocontestapp/awesome%20baby%20srija/gallery.How can i achieve this.  

1 Ответ

0 голосов
/ 09 мая 2020

Судя по комментариям, я предполагаю, что вы не установили req.CampaignId, поэтому вам следует запросить его и сначала найти кампанию. Это должно решить вашу проблему.

exports.getGallery = (req, res) => {
  Campaign.findOne({ Title: req.params.Title }, function(err, campaign) {
    PhotoEntries.find({ CampaignId: campaign._id }, ['Photo'], {sort:{ _id: -1} }, function(err, photos) {
      res.render('admin/gallery', {  photolist : photos }); 
    });
  });
};
...