es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Mongoose: poblar un objeto dentro de un array.

Tengo un esquema exportado de la siguiente manera:

const PackageSchema = new Schema({
  name: { type: String, required: true },
  maneuver: [
    {
      maneuverId: {
        type: mongoose.Schema.Types.ObjectId,
        required: true,
        ref: ManeuverMainly,
      },
      period: { type: String, enum: ["day", "night"], required: true },
    },
  ],
  timestamp: { type: Date, default: Date.now() },
});

Cuando hago una consulta find() de la siguiente manera:

Package.find().populate("maneuver", "name").exec((err, data) => {
    if (err) {
      res.status(500).send({ message: "¡Falló!" });
      return;
    }
    res.status(200).send(data);
});

Mi método populate no funciona. ¿Cómo puedo poblar cada maneuverId de mi PackageSchema con la columna name de mi ManeuverMainlySchema?

Obs: mi ManeuverMainlySchema a continuación:

const ManeuverMainlySchema = new Schema({
  name: { type: String, required: true },
  description: { type: String, required: true },
  timestamp: { type: Date, default: Date().now },
});
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para poblar adecuadamente cada maneuverId de PackageSchema con la columna name de ManeuverMainlySchema, debes modificar el método populate() en tu consulta de la siguiente manera:

    Package.find()
      .populate({
        path: 'maneuver.maneuverId',
        select: 'name',
        model: ManeuverMainly
      })
      .exec((err, data) => {
        if (err) {
          res.status(500).send({ message: "¡Error!" });
          return;
        }
        res.status(200).send(data);
    });
    

    Al utilizar esta sintaxis, estás poblado el campo maneuverId dentro del array maneuver de PackageSchema. La opción select le indica a Mongoose que solo devuelva el campo name de ManeuverMainlySchema, y la opción model especifica el modelo a utilizar para la población.

Comments are closed.