Вопрос

У Gridfs есть упсарт?

Например, если я хочу сохранить изображение с указанным _id, и один с тем же _id уже существует, я хочу, чтобы он перезаписал (обновить). В противном случае вставьте его.

Это было полезно?

Решение

Спецификация на самом деле не предназначена для поддержки UPSERTS, поскольку вы технически изменяете более одного документа, и, безусловно, может возникнуть сложные условия расы. Поэтому мы рекомендуем, что сделал Matt, который должен сначала удалить, а затем поставить.

Другие советы

Я посмотрел на исходный код Mongo Ruby GEM и нашел это:

# Store a file in the file store. This method is designed only for writing new files;
# if you need to update a given file, first delete it using #Grid#delete.
# ...
def put(data, opts={})

Итак, я сделал это в коде:

grid.delete(id) # if exists  
grid.put(tmp_file.read, :_id => id, :content_type => file_type)

Смотрите рабочий скрипт Sinatra здесь:http://github.com/acani/acani-sinatra/blob/master/acani.rb#l97.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top