【问题标题】:MongoDB remove GridFS objects from shellMongoDB 从 shell 中删除 GridFS 对象
【发布时间】:2012-02-06 08:31:37
【问题描述】:

我使用 GridFS 将文件存储在 MongoDB 中。我需要从 JavaScript shell 中按 ID 删除其中一些文件。我需要使用它的 ID 删除单个文件。我想我可以这样做:

db.fs.files.remove({_id: my_id});

这在某种程度上有效;它从fs.files 集合中删除文件,但不会从fs.chunks 集合中删除块本身。我知道的原因是因为我在 RockMongo 中检查了前后两个集合的长度。

我可以遍历这些块并删除那些引用该文件的块,但是有没有更好的内置方法呢?

【问题讨论】:

    标签: javascript shell mongodb gridfs


    【解决方案1】:

    您可以通过从 shell 中删除块和文件来删除 gridFS 文件。例如

    db['fs.chunks'].remove({files_id:my_id});
    db['fs.files'].remove({_id:my_id});
    

    那些命令会做这样的伎俩。

    【讨论】:

      【解决方案2】:

      您想改用db.fs.delete(_id);

      更新 抱歉,这显然不适用于外壳,只能通过驱动程序。 GridFS 是由驱动程序实现的存储规范。看起来它没有太多来自 shell 的内置功能。

      Update 2 还有一个命令行工具,mongofiles (http://www.mongodb.org/display/DOCS/GridFS+Tools),它允许您按名称删除文件。 mongofiles delete <filename>。它带有一个警告,它将删除该名称的所有文件,因此它不像 id 那样精细。

      【讨论】:

      • 啊,我明白了。可悲的是,我不能使用 mongofiles,因为我只有要删除的文件的 ID。你预见到我自己删除匹配的块会遇到什么问题吗?
      • 你需要通过shell来做这个吗?为什么不用您选择的语言与司机联系?不,据我所知,可以先做db.fs.chunks.remove({files_id:my_id}); 然后db.fs.files.remove({_id:my_id});
      • 我更喜欢从 shell 中执行此操作,但我会使用带有驱动程序的语言。谢谢!
      【解决方案3】:
      mongofiles --host localhost:30000 --db logo delete logo_susan1225.png
      

      请参阅此页面: http://docs.mongodb.org/manual/reference/program/mongofiles/#bin.mongofiles

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-23
        • 2013-03-16
        • 1970-01-01
        • 2023-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多