Mongodb 架构/模型中文件的字段类型是什么?

Ope*_*nds 6 mongodb node.js

我正在使用 Mongo Schema 来发布表单。适用于所有字符串,但现在我正在尝试上传文件。我应该指定文件在架构中的字段类型是什么?

//create model/schema
const TrackSchema = new Schema({
    title:{
        type: String, 
        required: true
    },
    length:{
        type: String, 
        required: true
    }, 
    available:{
        type: Boolean, 
        required: true
    },
    image:{
        type: String, 
        required: true
    }, 
    date: {
        type: Date, 
        default: Date.now
    }, 
    source: {
        type: **??, 
        required: true
    }
})
Run Code Online (Sandbox Code Playgroud)

我应该将“源”字段设置为什么类型,该字段将是来自表单的文件

dev*_*dev 5

这实际上取决于您的用例——特别是您正在处理的约束。

我可以想到两种方法来做到这一点:

  1. 将其存储为type: Buffer.
  2. 将其存储为type: Stringin base64.

Buffer就空间/速度而言,将其存储为 a可能是最有效的存储方式。它还使您可以灵活地将其转换为您的用例所需的任何类型。

当您需要访问文件进行下载时,将其存储为 aString将使您可以更轻松地控制文件内容,因为您不需要从 转换Bufferbase64.

就我个人而言,我喜欢将文件存储为 aBuffer并添加其他必要的字段,例如filename和 ,mimetype这会产生类似的结果:

source: {
        file: { type: Buffer, required: true },
        filename: { type: String, required: true },
        mimetype: { type: String, required: true }
      }
Run Code Online (Sandbox Code Playgroud)

...但这也是特定于我的用例的。

GridFS如果您的文件超过 16MB 文件大小,还有第三种选择将其存储在 mongo 中。您可以在他们的官方文档页面中阅读更多相关信息:https://docs.mongodb.com/manual/core/gridfs/


Rav*_*pta 2

通常,您将文件数据存储到数据库中(如果您要存储文件)。

有多种方法可以存储文件数据。

  1. 您的文件大小小于 16 MB。您可以将数据直接存储到缓冲区中的集合(二进制数据)。

    source : { data: Buffer, contentType: String }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 如果文件大小超过16MB,您可以使用GridFS

  3. 您将文件存储在磁盘上,只存储 mongodb 集合的路径。在这种情况下,类型只是字符串。