Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

143
Vistas
Mongoose actualiza un subdocumento profundamente anidado que solo tiene el subdocumento _id

Tengo el siguiente esquema para una cuadrícula (cuadrícula de evaluación). Cuadrícula => Secciones => Criterios => Niveles y quiero actualizar un solo elemento de Nivel.

 const mongoose = require("mongoose"); const levelSchema = mongoose.Schema( { title: { type: String, required: true, }, value: { type: Number, required: true, }, }, { timestamps: true } ); exports.Level = mongoose.model("Level", levelSchema); const criterionSchema = mongoose.Schema( { title: { type: String, required: true, }, levels: [levelSchema], }, { timestamps: true } ); criterionSchema.virtual("weight").get(function () { return Math.max(this.levels.map((level) => level.weigth)); }); exports.Criterion = mongoose.model("Criterion", criterionSchema); const sectionSchema = mongoose.Schema( { name: { type: String, required: true, }, criteria: [criterionSchema], }, { timestamps: true } ); sectionSchema.virtual("weight").get(function () { return this.criteria.reduce((acc, criteria) => acc + criteria.weight, 0); }); exports.Section = mongoose.model("Section", sectionSchema); const schema = mongoose.Schema( { name: { type: String, required: true, }, sections: [sectionSchema], code: { type: Number, required: true }, course: { type: mongoose.Schema.Types.ObjectId, ref: "Course", required: true, }, }, { timestamps: true } ); schema.virtual("weight").get(function () { return this.sections.reduce((acc, section) => acc + section.weight, 0); }); exports.Grid = mongoose.model("Grid", schema);

Pude recuperar la cuadrícula de un nivel específico con este código:

 Grid.findOne({"sections.criteria.levels._id": levelId})

Así que probé FindOneAndUpdate con este código:

 const grid = await Grid.findOneAndUpdate( { "sections.criteria.levels._id": req.params.levelId }, { $set: { "sections.$[].criteria.$[].levels.$[].title": req.body.title, }, }, { new: true });

Pero cambió TODOS los niveles de la cuadrícula.

¿Cómo podemos actualizar un sub, sub, subdocumento de un solo nivel y devolverlo?

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda