1

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

尝试使用 GridFsTemplate 但删除方法调用 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 ) );
}

更新:来自评论:

是的,您不能在 MongoDB 中执行此类查询。此外,没有直接的方法可以使用 mongofiles 命令行工具和 mongo java 驱动程序删除 GridFS 中的一堆文件。

4

2 回答 2

2

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

如果您的集合是MongoDB集合,则可以使用以下命令将其删除

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

如果您不确定名为“MyCollectionName”的集合是否存在,您应该首先检查它,如此所述。

如果您的集合是GridFS集合,您可以使用以下命令将其删除

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

这是可行的,因为 GridFS 集合由屏幕后面的一个.files和一个.chunks集合组成,并且可以以“经典”方式访问(和可移动)。

于 2020-01-04T13:32:29.110 回答
1
    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());
    }
于 2015-05-21T13:32:52.440 回答