2015-05-21 3 views
0

Использование Spring Mongo - это способ удаления нескольких файлов из Mongo (хранимых в GridFS) одновременно с использованием только запроса или чего-то подобного? Например, если у меня есть в коллекции .files поле Язык Я хочу иметь возможность удалять все записи из .files, а также из .chunks в одном запросе. Не уверен, что это возможно в Монго (за пределами Весны).String Mongo удалить все файлы из GridFs

Пытались использовать GridFsTemplate но метод удаления вызывает метод GridFS.remove (код из Спринг-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)); 
} 

UPDATE: от комментариев:

Да, вы не можете выполнять такого рода запросы в MongoDB. Кроме того, нет прямого способа удаления группы файлов в GridFS, используя инструмент командной строки mongofiles и драйвер mongo java.

+1

'* .files' и' * .chunks' две отдельные коллекции. В MongoDB невозможно выполнить операции над двумя отдельными коллекциями в рамках одного запроса. Как минимум, это должны быть два запроса: по одному для каждой коллекции. Кроме того, вы обычно используете встроенные методы GridFS вашего драйвера, если они доступны (я не знаком с Spring). – zamnuts

ответ

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()); 
    } 
+0

Спасибо, но это не то, что я ищу. Плохая производительность для удаления этого файла, например, 10k. К сожалению, монго не дает возможности удалить обе записи из коллекций непосредственно в запросе. (т. е. Удалить * из .files, .chunks где file_id> 10) – andreyro

+1

Да, вы не можете выполнять такие запросы в MongoDB. Кроме того, нет прямого способа удаления группы файлов в GridFS, используя инструмент командной строки mongofiles и драйвер mongo java. –

+1

Если в вашей базе данных есть только файлы GridFS, и вы хотите удалить их все, вы можете удалить всю базу данных. –

Смежные вопросы