String Mongo 从 GridFs 中删除所有文件

String Mongo delete all files from GridFs

使用 Spring Mongo 有没有一种方法可以仅使用查询或类似的东西一次性从 Mongo(存储在 GridFS 中)中删除多个文件?例如,如果我在集合 .files 中有一个字段语言,我希望能够在单个查询中从 .files 和 .chunks 中删除所有条目。不确定这在 Mongo 中是否可行(在 Spring 之外)。

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

public void delete(Query query) {
    getGridFs().remove(getMappedQuery(query));
}

并且这个方法获取内存中的所有文件,然后一个一个删除:

 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 ) );
}

更新:来自评论:

Yes, you can't perform such kind of queries in MongoDB. Also, there is no direct way of deleting bunch of files in GridFS using both mongofiles command line tool and mongo java driver.

    DBObject query;
    //write appropriate query
    List<GridFSDBFile> fileList = gfs.find(query);
    for (GridFSDBFile f : fileList)
    {
        gfs.remove(f.getFilename());
        // if you have not set fileName and
        // your _id is of ObjectId type, then you can use 
        //gfs.remove((ObjectId) file.getId());
    }

要一次删除整个 collection,您可以执行以下操作之一:

如果你的collection是MongoDBcollection,你可以用

删除它
MongoDatabase db = client.getDatabase("db");
db.getCollection("MyCollectionName").drop();

如果您不确定名为 "MyCollectionName" 的 collection 是否存在,您应该先检查一下,如 here 所述。

如果您的 collection 是 GridFS collection,您可以使用

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

这是可行的,因为 GridFS collections 在屏幕后面由 .files.chunks collection 组成,并且可以在'classic' 方式。