Home > Software engineering >  is there a way to filter this request with mongoose?
is there a way to filter this request with mongoose?

Time:03-09

I need to make a query of all products but only with the category status in true, The model of my products is something like this:

const ProductSchema = Schema({
name : {type: String},
category: {type: Schema.Types.ObjectId, ref: 'Category'}
})

Normally I would just make a query and then a filter for the products with category.status === true, but the thing is that I'm using pagination and due to the filter my page of 15 products ends up with fewer products than 15 obviously because of the filter, so I really don't know if I can make the filter with a population in the query, maybe something like this:

const query = await Product.find().populate('category', 'name status')
.select(['-cost']).where('category.status')
.equals(true).skip(0).limit(15)

but sadly it doesnt work, is there a way to do it or should i give up?

CodePudding user response:

You can easily achieve this with an aggregation:

const query = await Product.aggregate([
      {
        $lookup: {
          from: 'Category',
          localField: 'category',
          foreignField: '_id',
          as: 'status'
        }
      },
      {
        $match: {
          "status.status": true
        }
      },
      {
        $project: {
          "cost": 0, // disclude
        }
      },
      {
        $limit: 15
      },
      {
        $skip: 0
      }
  ])
// passed the tests in my database
  • Related