使用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中的文件串。
答案 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());
}