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.

mangosta: Agrega un elemento a un array de hijos vacío

Tengo el siguiente esquema y tengo un documento de la historia en mongodb, esta historia no tiene valores para la clave “fans”, que es un array.
Me gustaría agregar un elemento a este array. Sin embargo, intenté usar fans.push, fans.pop o fans = [element], pero no funciona. Por favor, ayúdame a entender cuál es la mejor manera de hacer esto.

const personSchema = Schema({
  _id: Schema.Types.ObjectId,
  name: String,
  age: Number,
  stories: [{ type: Schema.Types.ObjectId, ref: 'Story' }]
});

const storySchema = Schema({
  author: { type: Schema.Types.ObjectId, ref: 'Person' },
  title: String,
  fans: [{ type: Schema.Types.ObjectId, ref: 'Person' }]
});

const Story = mongoose.model('Story', storySchema);
const Person = mongoose.model('Person', personSchema);

const story1 = new Story({
  title: 'Casino Royale',
  author: author._id    // asignar el _id de la persona
});

const fan = new Person({
  _id: new mongoose.Types.ObjectId(),
  name: 'Fan 001',
  age: 38
});
fan.save(function(err){
  if (err) return handleError(err);
  const story1 = Story.findOne({title: 'Casino Royale'});
  story1.fans=[fan._id];
  story1.save(function (err){
    if (err) return handleError(err);
  });
});

Cuando ejecuto este script, obtengo el siguiente error:
enter image description here

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para agregar un elemento al array “fans” de un documento “Story”, debes seguir estos pasos:

    1. Encuentra el documento “Story” que deseas actualizar utilizando findOne() o findById().
    2. Crea un nuevo documento “Person” para el fan y guárdalo si no existe.
    3. Agrega el _id del fan al array fans del documento “Story” encontrado.
    4. Guarda el documento “Story” actualizado.

    Aquí tienes un ejemplo de cómo modificar el código para agregar un fan al documento “Story”:

    const fan = new Person({
      _id: new mongoose.Types.ObjectId(),
      name: 'Fan 001',
      age: 38
    });
    
    fan.save(function(err) {
      if (err) return handleError(err);
    
      Story.findOne({title: 'Casino Royale'}, function(err, story) {
        if (err) return handleError(err);
    
        story.fans.push(fan._id); // agregar el _id del fan al array fans del story
    
        story.save(function (err) {
          if (err) return handleError(err);
          console.log('Fan añadido al array de fans del story');
        });
      });
    });
    

    En este código, creamos un nuevo documento “Person” para el fan y lo guardamos. Luego, utilizamos findOne() para encontrar el documento “Story” con el título “Casino Royale”. Una vez que encontramos el documento, agregamos el _id del fan al array fans y guardamos el documento “Story”. Esto actualizará el array fans del documento “Story” con el _id del nuevo fan.

    Nota: Asegúrate de manejar los errores de manera apropiada y modifica el código para que se ajuste a tu caso de uso específico.

Comments are closed.