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.

Cómo actualizar una matriz anidada de mongo en nodejs?

Aquí está mi modelo:

const userSchema = mongoose.Schema({
    given_name: { type: String, required: true },
    email: { type: String, required: true },
    picture: { type: String },
    id: { type: String },
    shelf: [{ readlist: [String] }]
})

Dentro del estante de un usuario, hay otra matriz llamada “readlist”. Esta se actualizará cada vez que un usuario agregue un libro a su lista de lectura.
Intenté la siguiente forma al crear un usuario:

User.create({ email: email, given_name: given_name, picture: picture, id: sub, shelf: {readlist: []} });

Pero está creando un objeto dentro de la matriz del estante.
¿Cómo puedo crear directamente una matriz “readlist” dentro de la matriz del estante y agregar los valores dentro de “readlist”?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para crear directamente una matriz de “readlist” dentro de la matriz de “shelf”, puedes actualizar el esquema de usuario para tener una estructura de matriz anidada como esta:

    const userSchema = mongoose.Schema({
       given_name: { type: String, required: true },
       email: { type: String, required: true },
       picture: { type: String },
       id: { type: String },
       shelf: [{ 
          readlist: {type: [String], default: []}
       }]
    })
    

    La matriz de “readlist” ahora está anidada dentro de la matriz de “shelf”. El atributo default: [] inicializará la matriz de “readlist” como una matriz vacía si no se proporciona durante la creación del usuario.

    Para agregar un libro a la “readlist” de un usuario, puedes actualizar el documento del usuario con el siguiente código:

    User.updateOne(
       { email: userEmail }, 
       { $push: { "shelf.0.readlist": bookTitle } },
       function(err, result) {
          if (err) {
             console.log(err);
          } else {
             console.log(result);
          }
       }
    );
    

    Este código actualizará el documento del usuario donde el atributo “email” coincide con “userEmail”. El operador $push agregará el “bookTitle” a la matriz de “readlist”. El “shelf.0” se refiere al primer elemento de la matriz de “shelf”, donde está anidada la matriz de “readlist”.

Comments are closed.