¡Buen trabajo a todos!
Tengo un proyecto que escribí con Node js. En este proyecto, tengo una estructura de esquema de la siguiente manera.
const debt = new Schema({ name: { type: String, required: true, }, medicine: [{ data: { type: Schema.Types.ObjectId, ref: 'Medicine', }, quantity: { type: Number, default: 1 } }], total: { type: Schema.Types.Decimal128, default: 0, }, status: { type: String, required: true, }, createdAt: { type: Date, default: Date.now, }, }); const medicine = new Schema({ name: { type: String, unique: true, required: true, }, price: { type: Schema.Types.Decimal128, required: true, }, medicineType: { type: String, required: true, }, description: { type: String, required: true, trim: true, }, image: { type: String, }, createdAt: { type: Date, default: Date.now, }, });Puedo agregar con éxito datos a este esquema del cartero. Pero no puedo leer los datos en el archivo ejs, ¿cómo puedo hacer eso?
Puedo leer los datos a través de la consola y el código que uso en la consola es el siguiente:
const debt = await Debt.find({}).populate('medicine.data').sort('-createdAt'); console.log(JSON.stringify(debt[0].medicine[0].data));El código anterior devuelve con éxito tanto el esquema al que hace referencia como sus propios datos.
<% for(let i=0; i< debt.medicine.length; i++) { %> <input type="checkbox" id="<%= medicine[i]._id%>" name="medicine" checked value="<%= debt.medicine[i].data%>"> <label for="<%= medicine[i]._id%>"><%= JSON.stringify(debt.medicine[i].data) %> - Select %> </label> <% } %>Pero cuando hago esto en el archivo ejs, solo devuelve los valores de id y cantidad. Cuando lo imprimo en la consola, puedo acceder a todos los datos como en el esquema de medicamentos. ¿Por qué no puedo acceder al archivo ejs? ¿me puedes ayudar?
Los datos que devuelve cuando lo imprimo en la consola
{"_id":"624e0b3633533f3a31e3dc6a","name":"Arveles","price":{"$numberDecimal":"19"},"medicineType":"Pill","description":"Medicine","image":"/uploads/1649281846287-medicine1.jpeg","createdAt":"2022-04-06T21:50:46.294Z","__v":0}Cuando lo imprimo en ejs, devuelve un valor como este
{"data":"624e0b3633533f3a31e3dc6a","quantity":2,"_id":"62537484a05359a8cf356fef"}Si, acabo de resolver la situación, no llené correctamente la página a través de la estructura de control... Tal vez le pueda pasar a otros, en tales estructuras, es necesario enviar dos datos dentro del proceso de poblamiento.
Solución al problema:
const debt = await Debt.findOne({ _id: req.params.id }).populate('medicine.data'); populate('medicine.data')Puedo decir que todo el proceso gira aquí.