mongodb安装_MongoDB:GridFS删除方法删除存储桶中的所有文件

mongodb安装

mongodb安装

前一段时间,我们遇到了MongoDB GridFS的奇怪行为,这使我为MongoDB Java驱动程序创建了一个故障

今天,我在浏览器书签中找到了指向故障单的链接。 该票证目前尚未解决,因此我认为值得一小篇博文,以防其他人遇到此问题。

让我们看一下以下简化的Java服务:

public class GridFsService {

  private GridFS gridFs;

  public void connect(String mongoDbHost, String databaseName) throws UnknownHostException {
    DB db = Mongo.connect(new DBAddress(mongoDbHost, databaseName));
    this.gridFs = new GridFS(db, "myBucket");
  }

  public void removeGridFsFile(String id) {
    GridFSDBFile file = this.gridFs.findOne(new ObjectId(id));
    this.gridFs.remove(file);
  }

  // .. other methods to create and update files
}

该服务使用MongoDB Java驱动程序来创建,更新和删除GridFS中的文件。 但是,removeGridFsFile()方法存在严重缺陷。 猜猜如果将无效的id传递给removeGridFsFile()会发生什么。 gridFs.findOne()对于不存在的ID返回null。 因此,将null传递给gridFs.remove(),然后删除当前bucket中的所有文件

解决这个问题很容易。 只需添加一个空检查或使用另一个采用ObjectId而不是GridFsDBFile的GridFS remove()方法即可:

public void removeGridFsFile(String id) {
  this.gridFs.remove(new ObjectId(id));
}

使用这种方式,如果将无效的ID传递给removeGridFsFile()(没有文件被删除),则一切正常。 为了确保不会再次发生这种情况,我测试了如果将null传递给三种不同的remove()方法中的任何一种,会发生什么情况:

gridFs.remove((String)null);      // nothing happens
gridFs.remove((ObjectId)null);    // nothing happens
gridFs.remove((DBObject)null);    // all files from bucket are removed

我不知道这是否是预期的行为。 gridFs.remove(DBObject query)的Javadoc注释告诉我,它将删除所有与给定查询匹配的文件。 但是,如果我打算这样做,则应该在javadoc注释中明确指出,传递null会删除存储桶中的所有文件。

翻译自: https://www.javacodegeeks.com/2013/11/mongodb-gridfs-remove-method-deletes-all-files-in-bucket.html

mongodb安装

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值