Tengo un problema con Mongoose CastError. Hice una API de nodeJs. En la ruta específica, devuelve datos adjuntos con algunos otros datos. Vi muchas correcciones disponibles aquí, pero mi escenario es diferente.
Aquí está mi modelo y el problema ocurre en la propiedad de los campos.
const deviceSchema = new Schema({ device_id: { type: String, required: true }, user_id: { type: Schema.Types.ObjectId, ref: 'User', require: true }, location_latitude: { type: String, default: '0' }, location_longitude: { type: String, default: '0' }, fields: [{ type: String }], field_id: { type: Schema.Types.ObjectId, ref: 'Field', required: true }, timestamp: { type: Date, default: Date.now, }, });y mi controlador es
exports.getAllDevices = async (req, res) => { try { let devices = await Device.find({}) .sort({ timestamp: 'desc', }) .populate('user_id', ['name']); // Let us get the last value of each field for (let i = 0; i < devices.length; i++) { for (let j = 0; j < devices[i].fields.length; j++) { if (devices[i].fields[j] !== null && devices[i].fields[j] !== '') { await influx .query( `select last(${devices[i].fields[j]}), ${devices[i].fields[j]} from mqtt_consumer where topic = '${devices[i].device_id}'` ) .then((results) => { ************** Problem occurs here ************** if (results.length > 0) { devices[i].fields[j] = { name: devices[i].fields[j], last: results[0].last, }; } else { devices[i].fields[j] = { name: devices[i].fields[j], last: 0, }; } ************** Problem occurs here ************** }); } } } // Return the results res.status(200).json({ status: 'Success', length: devices.length, data: devices, }); } catch (err) { console.log(err); res.status(500).json({ error: err, }); } };En realidad, obtiene datos de InfluxDB y los agrega a la propiedad de campos que se obtuvo de MongoDB como se menciona en mi modelo. Pero se negó a agregar y se produce CastError.
Después de la adición, se verá así
No puedo resolver este error después de intentar tantas correcciones. No se donde me equivoque. Por favor sugiérame alguna solución para esto.
Puedo ver que no está utilizando la variable de devices como Mongoose Document . devices es una matriz de Documentos .
Me gustaría sugerirle que use la función lean () para convertir de Documento a objeto JavaScript simple como
let devices = await Device.find({}) .sort({ timestamp: 'desc', }) .populate('user_id', ['name']) .lean();