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

152
Vistas
Hacer que las consultas pobladas con mongoose lean () devuelvan POJO sin ningún objeto reutilizado

Si uso Mongoose para ejecutar una consulta en un esquema que tiene una referencia a otro modelo (en este caso, un modelo de BlogPost con una propiedad author que hace referencia a otro modelo Author).

 let posts = await BlogPost.find({}, "title author").populate("author","name bio").lean()

Al pasar lean(), se supone que debo recuperar un POJO así:

 [{ "_id": "602828eaff09bca9c3af2dbb", "author": { "_id": "602433bd98d380443ef9aeb7", "name": "Matt", "bio": "matt is cool" }, "title": "Hello World", "__v": 0 }, { "_id": "6048b8cb0200e51b4f2486c8", "author": { "_id": "602433bd98d380443ef9aeb7", "name": "Matt", "bio": "matt is cool" }, "title": "Another Blog post", "__v": 0 }]

Sin embargo, si modifico por ejemplo

publicaciones[0].autor.nombre = "Prueba"

luego TODAS las publicaciones con este autor en la matriz se modifican:

 [{ "_id": "602828eaff09bca9c3af2dbb", "author": { "_id": "602433bd98d380443ef9aeb7", "name": "Test", "bio": "matt is cool" }, "title": "Hello World", "__v": 0 }, { "_id": "6048b8cb0200e51b4f2486c8", "author": { "_id": "602433bd98d380443ef9aeb7", "name": "Test", "bio": "matt is cool" }, "title": "Another Blog post", "__v": 0 }]

Si, en cambio, solo quisiera afectar el primer objeto de la matriz, ¿qué debo hacer?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

La función de llenado en Mongoosehttps://mongoosejs.com/docs/api/query.html#query_Query-populate tiene una opción clone:true

[options.clone=false] «boolean» Cuando haces BlogPost.find().populate('author'), las publicaciones de blog con el mismo autor compartirán 1 copia de un documento de autor. Habilite esta opción para hacer que Mongoose clone los documentos completos antes de asignarlos.

Así que el código correcto sería algo como

 let posts = await BlogPost.find({}, "title author").populate({path:"author", fields:"name bio", clone:true}).lean()

Gracias a @buithienquyet en los comentarios por los consejos.

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