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

134
Vistas
Población profunda dinámica con MongoDB

Me pregunto si puede completar dinámicamente en profundidad con MongoDB, específicamente estoy usando mongoose en una aplicación express. Estoy tratando de construir un clon básico de reddit. En mi modelo Post, estoy tratando de crear una cadena de respuesta. Las respuestas podrían anidarse, ya que alguien podría responder a una respuesta de una respuesta. ¿Puedo completar esa cadena de respuesta? Solo puedo averiguar cómo completar la primera capa de respuestas. Según la lectura de la documentación y la observación de otras respuestas en el desbordamiento de la pila, no creo que esto sea posible, pero quería plantear la pregunta antes de remodelar mis datos. Aquí está mi modelo de publicación:

 const postSchema = new mongoose.Schema( { content: { type: String, required: [true, 'A post can not be empty'], }, thread: { type: mongoose.Schema.ObjectId, ref: 'Thread', }, isReply: { type: Boolean, default: false, }, parentPost: { type: mongoose.Schema.ObjectId, ref: 'Post', }, }, { toJSON: { virtuals: true }, toObject: { virtuals: true }, } ); postSchema.virtual('replies', { ref: 'Post', foreignField: 'parentPost', localField: '_id', });

Y el controlador de subprocesos donde estoy haciendo la consulta y tratando de completar la cadena de respuesta:

 exports.getThread = factory.getOne(Thread, 'thread', { path: 'posts', // Deep populate the replies from each post populate: { path: 'replies' }, }); // This is the factory getOne function exports.getOne = (Model, modelName, popOptions) => catchAsync(async (req, res, next) => { const query = popOptions ? Model.findById(req.params.id).populate(popOptions) : Model.findById(req.params.id); const doc = await query; if (!doc) return next( new AppError(`No ${modelName} could be found with that id`, 404) ); res.status(200).json({ status: 'success', data: { [modelName]: doc }, }); });
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El comportamiento deseado no está integrado en la mangosta.

También aconsejaría contra una estructura de datos que lo haga necesario. ¿Consideró otras estructuras de árbol de documentos (puede encontrar muchos ejemplos aquí o consultar el docu de mongodb)? Encuentro que los árboles con referencias a los padres son más útiles para los comentarios.

Pero volvamos a la población recursiva:

Por lo general, no querrá una consulta que pueda devolver cantidades impredecibles de datos. ¡Así que solo haga esto si limita la cantidad de documentos devueltos!

Hay otra pregunta que proporciona algunos ejemplos de implementaciones personalizadas de población de relaciones recursivas ( enlace )

about 4 years ago · Juan Pablo Isaza 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