【问题标题】:get mongodb file id before the image is saved using gridfs在使用gridfs保存图像之前获取mongodb文件id
【发布时间】:2015-12-05 13:06:29
【问题描述】:

我是 MongoDb GridFs 的新手。我正在创建一个应用程序,我正在创建一个会议并上传与会议相关的文件。当我保存整条记录时,表格必须有会议ID自动生成的编号和我从mongodb收到的文档ID

return gridFsTemplate.store(inputStream, documentName, "image/jpeg", metaData).getId();

现在业务要求文件是异步上传的,这样大文件就没有页面了,用户不用等上传完成就可以提交页面了。问题是,除非整个上传完成,否则我不会获得文档 ID。但除非我有 id,否则我无法将会议 id 的数据保存在 mysql 表中。 请提出替代方案。

【问题讨论】:

  • 您需要创建@Async 方法来异步上传您的图像见这里https://spring.io/guides/gs/async-method/。对于id,尝试将_id 添加到您的元数据变量中。因此,您可以在 mongodb 中返回 id 并异步保存图像
  • 所以你的意思是我将会议ID存储在文件的元数据变量中,然后从文件ID中检索它并保存在mysql中?
  • 我的意思是:不是委托 MongoDB 为图像生成 ID,而是自己生成它。此 ID 将与图像内容 + 您在 MySQL 中的会议一起保存。您无需保存 ID 并再次检索它。顺便问一下,为什么你需要在 MongoDB 中存储你的图像和在 MySQL 中存储你的会议,你见过 MySQL BLOB 来存储二进制文件吗?
  • 我需要保存图片。将图像保存在 mongodb 中而不是将其保存为 mysql blob 不是一个好主意吗?检索图像时 mongodb 的性能似乎优于 mysql blob。此外,如果我们谈论数千个图像,mysql 将消耗更多的磁盘空间。如果我错了,请纠正我。
  • 基本上,如果您的数据不适合单实例/PC,请使用分布式数据库,例如 MongoDB。对于较少的数据,MySQL 比其他 NoSQL 数据库更快、更高效。因此,根据您的数据大小,选择存储在 MongoDB 或 MySQL 中或混合存储(保留在 MongoDB 中,使用 MySQL 进行事务、聚合等...)

标签: java spring mongodb spring-mvc spring-rest


【解决方案1】:

将您的代码替换为:-

return (ObjectId)gridFsTemplate.store(inputStream, documentName, "image/jpeg", metaData).getId();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    • 1970-01-01
    • 2015-03-17
    • 1970-01-01
    • 2012-11-15
    相关资源
    最近更新 更多