Mongodb模式/模型中文件的字段类型是什么



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

//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
}
})

我应该制作什么类型的"源"字段,它将是来自表单的文件

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

我可以想出两种方法:

  1. 将其存储为type: Buffer
  2. 将其作为type: String存储在base64

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

当您需要访问它进行下载时,将其存储为String将使您更容易控制文件内容,因为您不需要从Buffer转换为base64

就我个人而言,我喜欢将文件存储为Buffer,并添加其他必要的字段,如filenamemimetype,这将产生以下结果:

source: {
file: { type: Buffer, required: true },
filename: { type: String, required: true },
mimetype: { type: String, required: true }
}

但这也适用于我的用例。

还有第三种选择,即在mongo中使用GridFS存储它,以防您的文件超过16MB的文件大小。你可以在他们的官方文档页面上阅读更多关于这方面的信息:https://docs.mongodb.com/manual/core/gridfs/

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

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

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

    source : { data: Buffer, contentType: String }
    
  2. 如果文件大小超过16MB,则可以使用GridFS。

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

最新更新