Soy nuevo en MongoDB. Me gustaría almacenar imágenes en la base de datos. Sé que hay 2 formas en que puedo hacer para almacenar las imágenes, una es Gridfs, otra es BSON. ¿Cuáles son los pros y los contras de estas dos implementaciones? La única diferencia que conozco es que BSON tiene un límite de tamaño de 16 MB.
Otra cosa que me confunde es cómo usar cualquiera de las formas para implementar el modelo y las API. ¡Cualquier sugerencia será realmente útil!
Tengo un modelo llamado Imagen, que tiene una identificación, una breve descripción y la imagen real. Aquí está el código para mi modelo de imagen.
const Image = mongoose.model('Image', { imageID: { type: mongoose.SchemaTypes.ObjectId, required: true, }, img: { <What should I put here? > }, description: { type: String, required: false }, })Y necesito API para manejar la carga de la imagen (almacenar la imagen en la base de datos, obtener la imagen por ID, eliminar la imagen por ID).
Esto es lo que tengo para obtener por ID
app.get('/api/images/:id', async (req, res) => { const result = Image.find({imageID: req.body.imageID}) if (id) { res.send({result}) } })¡Siéntase libre de señalar si hay algo mal en mis códigos!
¡Cualquier explicación y ejemplos serían muy útiles! ¡Gracias!
MongoDB no está diseñado para almacenar imágenes, por supuesto que puede (muy limitado), pero es mejor usar otra solución como Amazon S3 o Google Cloud Storage.
Luego toma la URL de esas imágenes almacenadas y almacena esa URL como un campo en su documento mongo. Lo usas básicamente como un puntero a la imagen.
Si desea usar mongoDB, deberá usar multer un buen video en el que se está Cargando una imagen | Creación de una API REST con Node.js.
Otra vez. Quiero reiterar que el mejor enfoque es usar un tercero para almacenar archivos grandes como imágenes. MongoDB tiene límites de tamaño para sus documentos.
Además, si va a almacenar esta base de datos de forma remota utilizando Atlas, esas imágenes se apoderarán de los límites de su base de datos MUY rápidamente. Tiene un límite de 500 MB cuando usa el clúster gratuito, por lo que, a menos que tenga la intención de pagar, es mejor usar otra cosa.