Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java String Mongo从GridFs中删除所有文件_Java_Mongodb_Spring Mongo_Spring Mongodb - Fatal编程技术网

Java String Mongo从GridFs中删除所有文件

Java String Mongo从GridFs中删除所有文件,java,mongodb,spring-mongo,spring-mongodb,Java,Mongodb,Spring Mongo,Spring Mongodb,使用SpringMongo是否有一种方法可以一次删除Mongo中的多个文件(存储在GridFS中),只使用查询或类似的方法?例如,如果我在collection.files中有一种字段语言,我希望能够在单个查询中删除.files和.chunk中的所有条目。不确定这在Mongo(外部弹簧)中是否可行 尝试使用GridFsTemplate,但delete方法调用GridFS.remove方法(来自Spring Mongodb的代码) 此方法获取内存中的所有文件,然后逐个删除: public void

使用SpringMongo是否有一种方法可以一次删除Mongo中的多个文件(存储在GridFS中),只使用查询或类似的方法?例如,如果我在collection.files中有一种字段语言,我希望能够在单个查询中删除.files和.chunk中的所有条目。不确定这在Mongo(外部弹簧)中是否可行

尝试使用GridFsTemplate,但delete方法调用GridFS.remove方法(来自Spring Mongodb的代码)

此方法获取内存中的所有文件,然后逐个删除:

 public void remove( DBObject query ){
    for ( GridFSDBFile f : find( query ) ){
        f.remove();
    }
}
void remove(){
    _fs._filesCollection.remove( new BasicDBObject( "_id" , _id ) );
    _fs._chunkCollection.remove( new BasicDBObject( "files_id" , _id ) );
}
更新:来自评论:


是的,您不能在MongoDB中执行此类查询。此外,使用mongofiles命令行工具和mongojava驱动程序也无法直接删除GridFS中的大量文件

DBObject查询;
//编写适当的查询
List fileList=gfs.find(查询);
for(gridfsdbf文件:文件列表)
{
gfs.remove(f.getFilename());
//如果尚未设置文件名和
//您的_id是ObjectId类型,然后您可以使用
//remove((ObjectId)file.getId());
}

要立即删除整个集合,可以执行以下操作之一:

如果您的收藏是MongoDB收藏,您可以使用删除它

MongoDatabase db = client.getDatabase("db");
db.getCollection("MyCollectionName").drop();
MongoDatabase db = client.getDatabase("db");
db.getCollection("MyCollectionName.files").drop();
db.getCollection("MyCollectionName.chunks").drop();
如果您不确定名为“MyCollectionName”的集合是否存在,则应首先检查该集合,如前所述

如果您的集合是一个GridFS集合,您可以使用

MongoDatabase db = client.getDatabase("db");
db.getCollection("MyCollectionName").drop();
MongoDatabase db = client.getDatabase("db");
db.getCollection("MyCollectionName.files").drop();
db.getCollection("MyCollectionName.chunks").drop();

这是可行的,因为GridFS集合由屏幕后面的
.files
.chunks
集合组成,这些集合可以通过“经典”方式访问(和移除)。

*。files
*。chunks
是两个独立的集合。在MongoDB中,不可能对同一查询中的两个独立集合执行操作。至少必须有两个查询:每个集合一个查询。另外,如果可以的话,您通常会使用驱动程序内置的GridFS方法(我不熟悉Spring)。谢谢,但这不是我想要的。例如,以这种方式删除10k文件的性能很差。遗憾的是,我认为mongo不能在查询中直接从集合中删除这两个条目。(即从.files、.chunks中删除*from.files,其中file_id>10)是的,您不能在MongoDB中执行此类查询。此外,使用mongofiles命令行工具和mongo java驱动程序也无法直接删除GridFS中的大量文件。如果数据库中只有GridFS文件,并且希望删除所有文件,则可以删除整个数据库。