【问题标题】:How to delete an entire gridfs (with the Ruby driver)?如何删除整个 gridfs(使用 Ruby 驱动程序)?
【发布时间】:2014-01-24 22:47:46
【问题描述】:

我正在考虑使用多个类似文件夹的 gridfs。这个想法是删除文件夹很容易。只需删除文件系统。我只有一个问题。我没有看到任何删除它们的方法?如果删除它们意味着我必须遍历所有它们并一个一个地删除它们,那么这样做是没有意义的。所以如果对 gridfs 更了解的人可以确认这是否可以做到,这是一个愚蠢的主意吗?此外,使用每个“文件/文件夹”的自己的索引等创建一个单独的文件系统可能是非常不明智的,因此可能会导致创建数千个单独的文件系统...... (但是,不要只是说这是一个愚蠢的想法,它是否可以做到,如果可以,怎么做,即使在我的特定用例中是不明智的,这仍然是一个有效的问题。)

这是我试图通过 ruby​​ 驱动程序实现的目标的说明:

file = "some_image.jpg"
grid = Mongo::Grid.new(Mongoid.database, File.join(cache_dir, File.basename(file))
genereate_versions_of(file).each do |version| #e.g. micro.jpg, thumbnail.jpg, large.jpg
  grid.put version
end

#and then later when all of the versions of this file needs to be deleted I'd like
#to do something like this... but it seems it's not possible?
Mongo::Grid.destroy(Mongoid.database, File.join(cache_dir, File.basename(file))
#or
grid = Mongo::Grid.new(Mongoid.database, File.join(cache_dir, File.basename(file))
grid.destroy

【问题讨论】:

    标签: ruby mongodb gridfs


    【解决方案1】:

    GridFS 只是普通集合之上的一个抽象层,由两个集合表示:.files 和 .chunks。您可以删除这两个集合以“删除您的 GridFS”。应该与File.join(cache_dir, File.basename(file)) 相同。

    【讨论】:

    • 那么鉴于db = Mongoid.database; grid_fs_name = File.join(cache_dir, File.basename(file)) 那么我可以简单地[ ".files", ".chuncks" ].each{ |part| db[grid_fs_name+part].drop }?更具体地说,对于我的用例.. mongodb 处理创建和销毁大量小型集合/索引的能力如何?这个想法是仅将文件临时存储在 gridfs 中,然后在后台作业中将文件移动到 S3 存储桶,因此根据用户上传新图像的积极程度,每天会创建和销毁 10-100 个 gridfs',但是不会有太多同时存在。
    • 是的,你可以这样做。创建集合并不是很昂贵,所以只要你的集合不超过 100 个就可以了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多