aquí estoy tomando la referencia del campo de categoría y subcategoría de su base de datos y quiero completar el nombre de la categoría y la subcategoría pero obtengo este error "No se pueden leer las propiedades de undefined (leyendo 'poblar')"
this.products.findOne({ _id: req.query.productId }, { createdAt: 0, updatedAt: 0, isActive: 0, isDeleted: 0, __v: 0 }) .exec(function (error, data) { if (error) { callback(error); } if (data && data.length == 0) { return callback(false, common.errorMsg("NO Details FOUND")); } else { // return callback(false, common.successMsg("product list", data)); data=data.map(function(item){ return { productId: item._id, productName: item.productName, storeName: item.createdBy.fullName, categoryName:item.category.name, subCategoryName:item.subCategory.name, image: item.fabricType[0].style[0].images[0], price: item.price } }) } return callback(false, common.successMsg("product", data)); }).populate('createdBy').populate('category').populate('subCategory').lean()El método exec devuelve una promesa, por lo que después de eso, no puede llamar a la función de populate . prueba este código:
this.products .findOne( { _id: req.query.productId }, { createdAt: 0, updatedAt: 0, isActive: 0, isDeleted: 0, __v: 0 }, ) .populate('createdBy') .populate('category') .populate('subCategory') .lean() .exec(function (error, data) { // ... })