Search code examples
mongodbmongoosemongoose-populate

Mongoose.populate() producing no change in the model


Listing Schema:

const mongoose = require('mongoose');

const listingSchema = new mongoose.Schema({
  title: String,
  name: String,
  tel: String,
  service: String,
  description: String,
  location: Object,
  isAvailible: Boolean,
  canTravel: Boolean,
  distance: Number,
  isPublic: { type: Boolean, default: true},

  pro: { type: mongoose.Types.ObjectId, ref: 'User' }
}, { timestamps: true });


const Listing = mongoose.model('Listing', listingSchema);

module.exports = Listing;

Request to DB:

Listing.find({ 'title': { '$regex' : service, '$options' : 'i' } , isPublic: { $gte: true }}, async (err, listings) => {
  if (err) { return next(err); }
  await listings[0].populate('pro');
  console.log(listings[0].pro);
  res.render('search', {
    title: 'Search',
    listings: listings,
    search: {
      service: service,
      zip: zip
    }
  });
});

Screenshot of console

I'm also curious what is the best way to populate an array of models, however, I can't even get it to populate one. Any thoughts?


Solution

  • can you please tye execPopulate() method

    try below code

    Listing.find({ 'title': { '$regex' : service, '$options' : 'i' } , isPublic: { $gte: true }}, async (err, listings) => {
      if (err) { return next(err); }
      const listing=await listings[0].populate('pro').execPopulate();
      console.log(listing.pro);
      res.render('search', {
        title: 'Search',
        listings: listing,
        search: {
          service: service,
          zip: zip
        }
      });
    });