Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

150
Visualizações
¿Cómo creo una cantidad de objetos con insertMany con datos existentes de la base de datos?

Actualmente estoy tratando de insertar una gran cantidad de modelos a través de insertMany, pero parece que no puedo descifrar cómo llenar la matriz al crear un objeto. Soy relativamente nuevo en Mongoose y agradecería cualquier ayuda, aquí está el código que tengo ahora.

 const ProgramsSchema = new mongoose.Schema({ program_id: { type: String, required: true }, description: { type: String }, });
 const schoolsSchema = new mongoose.Schema({ inst_url: { type: String }, programs: { type: [{type: ProgramsSchema, ref: "Programs"}] } });

Y aquí está el código donde trato de crear varias escuelas y agregarlo a la base de datos.

 let new_schools = [] for (let i = 0; i < schools.length; i++) { let school = schools[i] let p_arr = [] for (let p_index = 0; p_index < school["PROGRAMS"].length; p_index++) { let p_id = school["PROGRAMS"][p_index] Programs.find({program_id: p_id}).populate('Programs').exec(function(err, data) { if (err) { console.log(err); } else { p_arr.push(data[0]) } }) } let newSchool = { inst_url: school["INSTURL"], programs: p_arr, } new_schools.push(newSchool); } Schools.insertMany(new_schools);

Básicamente, puedo agregar todos los datos de la escuela a la base de datos, pero ninguno de los programas se completa. Me preguntaba si había una manera de hacer esto y cuál era la mejor práctica. Por favor, háganme saber si necesitan más información o si mi pregunta no fue clara.

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Hay algunos problemas con sus esquemas de mangosta. La operación que está tratando de hacer en find no está disponible, según sus esquemas de mangosta. No puede completar de "Programas" a "Escuelas". Puede completar desde "Escuelas" hasta "Programas", por ejemplo:

 Schools.find().populate(programs)

Y para hacer eso, son necesarios varios cambios en sus esquemas. La idea es almacenar los programas _id en su matriz de programs en la colección School y poder obtener la información de los programas a través de populate() , ya sea regular o 'custom populate' (poblar virtuales).

Relleno regular populate()

Cambiaría el schoolsSchema de escuelas para almacenar una matriz de _id en programs :

 const schoolsSchema = new mongoose.Schema({ inst_url: { type: String }, programs: [ {type: String, ref: "Programs"} ] });

También debe cambiar ProgramsSchema :

 const ProgramsSchema = new mongoose.Schema({ _id: Schema.Types.ObjectId, // that's important description: { type: String }, });

Y ahora, puedes hacer:

 Programs.find({_id: p_id}).exec(function(err, data) { if (err) { console.log(err); } else { p_arr.push(data[0]._id) } })

Sus documentos deben insertarse correctamente. Y ahora puede completar programs cuando realiza una consulta sobre School , como indiqué anteriormente:

 Schools.find().populate(programs)

Poblar virtual

La otra manera. En primer lugar, nunca lo he intentado de esta manera, pero creo que funciona de la siguiente manera:

Si desea completar campos que no son ObjectId , puede usar poblar virtuales ( https://mongoosejs.com/docs/populate.html#populate-virtuals ). En ese caso, sus esquemas deberían ser:

 const ProgramsSchema = new mongoose.Schema({ program_id: String, description: { type: String }, }); const schoolsSchema = new mongoose.Schema({ inst_url: { type: String }, programs: [ {type: String, ref: "Programs"} ] });

Habilite virtual en el esquema de su escuela:

 Schools.virtual('programs', { ref: 'Programs', localField: 'programs', foreignField: 'program_id' });

Luego, debe almacenar program_id .

 Programs.find({program_id: p_id}).exec(function(err, data) { if (err) { console.log(err); } else { p_arr.push(data[0].program_id) } })

Y como antes, puede populate() cuando lo necesite.

espero haber ayudado

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda