使用 Gridfs 或 BSON 将图像存储在 MongoDB

Store image at MongoDB using Gridfs or BSON

我是 MongoDB 的新手。我想将图像存储到数据库中。我知道有两种方法可以存储图像,一种是 Gridfs,另一种是 BSON。这两种实现的优缺点是什么?我知道的唯一不同是 BSON 有 16MB 的大小限制。

另一件让我感到困惑的事情是如何使用这两种方式来实现模型和 API。任何建议都会很有帮助!!

我有一个名为 Image 的模型,其中包含 ID、简要说明和实际图像。这是我的图像模型的代码。

const Image = mongoose.model('Image', {
    imageID: {
        type: mongoose.SchemaTypes.ObjectId,
        required: true,
    },
    img: { 
        <What should I put here? >
    },
        description: {
            type: String,
            required: false
        },
})

而且我需要 API 来处理上传图片(将图片存储到数据库,通过 ID 获取图片,通过 ID 删除图片)。

这是我要通过 ID 获取的内容

app.get('/api/images/:id', async (req, res) => {
        
        const result = Image.find({imageID: req.body.imageID})

        if (id) {
             res.send({result})
        }
    })

如果我的代码有问题,请随时指出!!

任何解释和示例都会非常有帮助!谢谢!

MongoDB不是用来存储图片的,当然可以(非常有限),但最好使用其他解决方案,例如Amazon S3或Google云存储。

然后您从这些存储的图像中获取 url,并将该 url 作为一个字段存储在您的 mongo 文档中。您基本上将其用作指向图像的指针。

如果您确实想使用 mongoDB,那么您将需要使用多个 Uploading an Image | Creating a REST API with Node.js 上的好视频。

再次。我想重申最好的方法是使用第 3 方来存储大文件,例如图像。 MongoDB 对其文档有大小限制。

此外,如果您要使用 Atlas 远程存储此数据库,那么这些图像将很快超出您的数据库限制。使用免费集群时有 500MB 的限制,所以除非你打算付费,否则最好使用其他东西。