Necesito hacer una consulta de todos los productos pero solo con el estado de la categoria en true,
El modelo de mis productos es algo como esto:
const ProductSchema = Schema({ name : {type: String}, category: {type: Schema.Types.ObjectId, ref: 'Category'} })Normalmente solo haría una consulta y luego un filtro para los productos con categoría.
status === true , pero la cosa es que estoy usando paginación y debido al filtro mi página de 15 productos termina con menos productos que 15 obviamente por el filtro, así que realmente no sé si puedo hacer el filtro con una población en la consulta, tal vez algo como esto:
const query = await Product.find().populate('category', 'name status') .select(['-cost']).where('category.status') .equals(true).skip(0).limit(15)Pero lamentablemente no funciona, ¿hay alguna manera de hacerlo o debo rendirme?
Puede lograr esto fácilmente con una agregación:
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