用PHP删除MongoDB GridFS中的多个文件

Jus*_*tin 5 php mongodb delete-file gridfs

我使用的MongoDBGridFSPHP,并试图找出如何通过删除多个文件 _id.

这是我的代码:

 $ids = array("50401f40ff558cec38000061", "62401f40ff558cec38000072", "73401f40ff558cec38000083");
 $mongo_ids = array();
 foreach($ids as $id) {
    $mongo_ids[] = new MongoId($id);
 }

 $mongo_grid_fs->remove(array("_id" => $mongo_ids));
Run Code Online (Sandbox Code Playgroud)

知道我做错了什么吗?

Sam*_*aye 3

由于 GridFS 的实际工作方式,这是不可能通过单个请求来完成的。

您有两个集合:

  • 文件

为了删除 GridFs 文件,您必须查询这两个表。因此,remove() 函数实际上调用块集合,然后从文件集合中删除文件。

由于 MongoDB 从根本上不能在一个请求中查询两个集合(基本上是联合删除),因此您必须为每个文件发送一个删除请求才能删除,否则您将留下剩余的块,占用块集合中的空间。

因此,考虑到这一点,@ToddMoses 的答案是正确的。

您当然可以使用:http://www.php.net/manual/en/mongogridfs.remove.php,但我相信它做完全相同的事情,只是抽象,所以您的查询应该是:

$mongo_grid_fs->remove(array("_id" => array('$in' => $mongo_ids)));
Run Code Online (Sandbox Code Playgroud)