Estoy tratando de filtrar mis mascotas por categoría, tengo el siguiente modelo de mascotas:
const Pet = mongoose.model( 'Pet', new Schema({ name: { type: String, required: true, }, age: { type: Number, required: true, }, description: { type: String, }, weight: { type: Number, required: true, }, color: { type: String, required: true, }, images: { type: Array, required: true, }, available: { type: Boolean, }, category: Object, user: Object, adopter: Object, }, { timestamps: true }), ); module.exports = Pet;cuando trato de obtener los datos a través del cartero, devuelve una matriz vacía como respuesta.
mi codigo para filtrar por categoria:
static async getByCategory(req, res) { const id = req.params.id; // check if id is valid if (!ObjectId.isValid(id)) { res.status(422).json({ msg: 'Invalid ID' }); return; } const pets = await Pet.find({ 'category._id': id }).sort('-createdAt'); if (!pets) { res.status(404).json({ msg: 'Pets not found!' }); return; } res.status(200).json({ pets }); }es la primera vez que uso mongodb, así que no estoy seguro de qué está mal.
¿Podría verificar que su MongoDB tenga un campo category._id ?
La id que se pasa desde el lado del cliente es una cadena y la que se guarda en la base de datos es ObjectId . Convierta la cadena a Mongoose ObjectId antes Pet.find() .
const id = mongoose.Types.ObjectId(req.params.id); const pets = await Pet.find({ 'category._id': id }).sort('-createdAt');No olvides importar 'mangoose'.