当前位置: 首页 > 面试题库 >

在没有GridFS的情况下使用MongoDB在NodeJS中存储一些小的文件(小于1MB)

许马鲁
2023-03-14
问题内容

我经营一个在nodeJS + mongoDB后端运行的网站。现在,我正在实现一个系统来存储一些需要存储在数据库中的图标(小的图像文件)。

据我了解,不使用GridFS更有意义,因为它似乎是为大文件或大量文件量身定制的。由于我需要保存的每个文件都将在BSON最大文件大小以下,因此我应该能够将它们直接保存到常规文档中。

我有两个问题:

1)我的推理正确吗?与GridFS相比,可以将图像文件保存在常规mongo集合中吗?我在这里没有考虑应该做的任何事情吗?

2)如果我的思考过程是正确的,我该如何去做?我可以做以下事情吗?

//assume 'things' is a mongoDB collection created properly using node-mongodb-driver

fs.readFile(pathToIconImage, function(err,image){
  things.insert({'image':image}, function(err,doc){
    if(err) console.log('you have an error! ' + err);
  });
});

我猜想可能有更好的方法,因为mongoDB使用BSON,在这里,我尝试在将文件发送到数据库之前将其保存为JSON。我也不知道这段代码是否可以工作(还没有尝试过)。

更新-新问题

如果我在一个文档集中保存了三段信息的文档:1)名称,2)日期,3)图像文件(上面的图标),并且我想将此文档按顺序发送给客户显示所有三个,这可能吗?如果没有,我想我需要使用GridFS并保存fileID来代替图像本身。有想法/建议吗?

最好,感谢您的答复,
萨米


问题答案:

如果您的图像确实足够小,不会对文档大小造成问题,并且您不介意进行少量额外处理,那么直接将其存储在您的收藏夹中可能会很好。为此,您需要对图像进行base64编码,然后使用mongo的BinData类型存储它。据我了解,它将被保存为BSON位数组,而不是实际存储base64字符串,因此大小不会增长到大于原始二进制映像的大小。

它将在json查询中显示为base64字符串,您可以使用它来获取二进制图像。



 类似资料:
  • 在Android中使用和iOS中使用下载存储文件,是否仍然在暗中使用下载uri方法,即在uri末尾使用不可猜测的标记? 我的要求禁止我们向世界公开这样的URL,所以问题是: null

  • 问题内容: 我需要从GridFS下载简历,以下是为此目的编写的代码ive,但这似乎并没有给我提供下载的物理文件,而是用于读取内容的。如何下载文件? 问题答案: 希望这可以帮助!

  • 我有一个现有的spring 4项目(mvc、jdbc等),我试图将其移植到spring boot,但我做不到(许多依赖项存在问题,没有人能解释我是如何做到这一点的)。但现在我只想在现有项目中使用Spring数据JPA。这是pom的一个主要依赖项: 我使用EntityManagerFactorybean(在所有示例中都使用)完成了现有配置。数据库配置: 用于测试的Derby数据库。但主要数据库类型是

  • 我看到的所有解决方案都需要使用。但是,我想在Eclipse之外的单个文件上使用CDT解析器。那有什么办法吗?

  • 问题内容: noob Golang和Sinatra人在这里。我入侵了Sinatra应用程序,以接受从HTML表单发布的上传文件,并通过GridFS将其保存到托管的MongoDB数据库中。这似乎工作正常。我正在使用mgo驱动程序在Golang中编写相同的应用程序。 从功能上来说,它工作正常。但是在Golang代码中,我将文件读入内存,然后使用mgo将文件从内存写入MongoDB。这似乎比我同等的Si

  • 我有一个Spring Boot应用程序,注释为。几乎所有的存储库都需要实现一些自定义逻辑,这是使用完成的。 是否有方法创建将从机制中排除的存储库?