node.js - req - node js response error
¿Cómo conviertes un documento de Mangosta en un objeto simple? (4)
El Model
mangosta hereda de Document
s, que tiene un método toObject()
. Creo que lo que estás buscando debería ser el resultado de doc.toObject()
.
http://mongoosejs.com/docs/api.html#document_Document-toObject
Tengo un documento de un hallazgo de mangosta que quiero extender antes de la codificación JSON y el envío como respuesta. Si intento agregar propiedades al documento, se ignora. Las propiedades no aparecen en Object.getOwnPropertyNames(doc)
haciendo 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?
Otra forma de hacerlo es decirle a Mongoose que todo lo que necesita es una versión de JavaScript sin formato del documento devuelto utilizando lean()
en la cadena de consulta. De esta forma, Mongoose omite el paso de crear la instancia de modelo completa y usted obtiene directamente un doc
que puede modificar:
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = ''foobar'';
res.json(doc);
});
Una mejor forma de resolver un problema como este es usar doc.toObject()
como este
doc.toObject({ getters: true })
otras opciones incluyen:
-
getters:
aplicar todos los getters (ruta y getters virtuales) -
virtuals:
aplicar getters virtuales (puede anular la opción de getters) -
minimize:
eliminar objetos vacíos (por defecto es verdadero) -
transform:
una función de transformación para aplicar al documento resultante antes de regresar -
depopulate:
despoblar cualquier ruta poblada, reemplazándolas por sus referencias originales (por defecto es falsa) -
versionKey:
si se debe incluir la clave de la versión (por defecto es verdadera)
así que por ejemplo puedes decir
Model.findOne().exec((err, doc) => {
if (!err) {
doc.toObject({ getters: true })
console.log(''doc _id:'', doc._id)
}
})
y ahora funcionará
la manera rápida si la propiedad no está en el modelo:
document.set( key,value, { strict: false });