Tengo un documento de un hallazgo de mangosta que quiero extender antes de la codificación JSON y enviarlo como respuesta. Si intento agregar propiedades al documento, se ignora. Las propiedades no aparecen al Object.getOwnPropertyNames(doc)
hacer que una extensión normal no sea posible. Lo extraño es que JSON.parse(JSON.encode(doc))
funciona y devuelve un objeto con todas las propiedades correctas. ¿Hay una mejor manera de hacer esto?
200
Model.find({})
los documentos? Return es una matriz. ¿Puedes docs.toObject?var docArray = modelArray.map(function(model) { return model.toObject(); });
Otra forma de hacer esto es decirle a Mongoose que todo lo que necesita es una versión simple de JavaScript del documento devuelto mediante el uso
lean()
en la cadena de consulta. De esta forma, Mongoose omite el paso de crear la instancia completa del modelo y obtiene directamente undoc
que puede modificar:fuente
lean
es generalmente más eficiente porque se saltea la sobrecarga de crear primero el documento completo de Mongoose.lean()
en la consulta establece la opción antes de que la consulta se ejecute realmente (porexec
) para que los resultados estén directamente en su forma "ajustada". Consulte esta pregunta para conocer el lado positivo del impacto en el rendimiento de las llamadaslean
.La forma rápida si la propiedad no está en el modelo:
document.set( key,value, { strict: false });
fuente
Una mejor manera de abordar un problema como este es usar
doc.toObject()
asíotras opciones incluyen:
getters:
aplicar todos los captadores (ruta y captadores virtuales)virtuals:
aplicar captadores virtuales (puede anular la opción de captadores)minimize:
eliminar objetos vacíos (el valor predeterminado es verdadero)transform:
una función de transformación para aplicar al documento resultante antes de regresardepopulate:
despoblar las rutas pobladas y reemplazarlas con sus referencias originales (el valor predeterminado es falso)versionKey:
si se incluye la clave de versión (el valor predeterminado es verdadero)así, por ejemplo, puedes decir
y ahora funcionará
Para referencia, consulte: http://mongoosejs.com/docs/api.html#document_Document-toObject
fuente
Para obtener un objeto simple del documento Mongoose, utilicé la
_doc
propiedad de la siguiente maneraLo intenté
toObject
pero me dio funciones, argumentos y todas las demás cosas que no necesito.fuente
_
al principio no es la solución ideal. Usar lean podría resolver su caso._doc
propiedad muchas veces sin enfrentar ningún problema. Y el uso dellean
método le proporciona un objeto simple en el que no puede realizar operaciones de modelo de mangosta.También puede stringificar el objeto y luego volver a analizarlo para crear el objeto normal. Por ejemplo como: -
fuente