String Mongo从GridFs

时间:2015-05-21 10:48:36

标签: java mongodb spring-mongo spring-mongodb

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

更新:来自评论:

  

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

1 个答案:

答案 0 :(得分: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());
    }