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

2K
Vistas
Eliminar los documentos a los que se hace referencia con el middleware mongoose/MongoDB (en 2021)

Probé todas las soluciones sobre el desbordamiento de pila que se relacionan con la eliminación de documentos a los que se hace referencia en MongoDB usando node.js. Pero la mayoría de ellos tienen soluciones con métodos obsoletos y algunos de ellos no funcionan en absoluto.

Tengo dos modelos, Parent e Child con una relación one-to-many . El documento principal incluye una matriz de ID de documentos secundarios a los que se hace referencia, como se muestra en el siguiente esquema.

 //file => parent.js const parentSchema = new mongoose.Schema({ parentName: { type: String, }, childrens : [ { type: mongoose.Schema.Types.ObjectId, ref: 'Children' } ] }); const Parent = mongoose.model("Parent", parentSchema); module.exports = Parent ;

El siguiente archivo tiene un modelo de children con el middleware o gancho childrenSchema.pre() que se activa con éxito:

 //file => children.js const mongoose = require("mongoose"); const Parent = require("./parent"); const childrenSchema = new mongoose.Schema({ childrenId: Number, info: String, type: String, }); childrenSchema.pre('findOneAndDelete', async function(next) { console.log('trigger when middleware runs' , this.getQuery()["_id"]) ; const childrenId = new mongoose.Types.ObjectId(this.getQuery()["_id"]) await Parent.updateOne({} , { $pull: { childrens: { _id: childrenId }}}); next() }) const Children = mongoose.model("Children", childrenSchema); module.exports = Children ;

Ahora, finalmente esta es la ruta a la que estoy llamando para eliminar la instancia de childrenId . Tengo bastantes errores, pero principalmente dice que Parent.updateOne() no es una función en el archivo anterior. Pero el middleware se activa con éxito cuando se ejecuta la siguiente ruta.

 // route which performs delete action and triggers mongoose middleware router.delete('/delete/instance' , async(req,res) => { const childrenId = new mongoose.Types.ObjectId('612cd0d8f9553c9f243db691') const deletedInstance = await Children.findOneAndDelete( { _id: childrenId} ) res.json(deletedInstance) })
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Tenga en cuenta que está intentando realizar updateOne() sin opción de filtro. Para la lógica en sí, ¿por qué no la pones dentro del enrutador?

 const Parent = require("./parent"); router.delete('/delete/instance' , async (req,res) => { await Parent.updateOne({ childrens: '612cd0d8f9553c9f243db691' }, { $pull: { childrens: '612cd0d8f9553c9f243db691' }}) const deletedInstance = await Children.findOneAndDelete({ _id: '612cd0d8f9553c9f243db691'}) res.json(deletedInstance) })
over 4 years ago · Santiago Trujillo Denunciar
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