Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

125
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!