Domanda

GridFS ha un upsert?

Ad esempio, se voglio salvare un'immagine con un _id specificato, e una con lo stesso _id esiste già, lo voglio per sovrascrivere (aggiornamento) di esso. In caso contrario, inserirla.

È stato utile?

Soluzione

La specifica non è realmente progettato per upserts di supporto, dal momento che si sta modificando tecnicamente più di un documento, e certamente può sorgere condizioni di gara difficili. Quindi si consiglia cosa Matt ha fatto, che è quello di eliminare prima e poi mettere.

Altri suggerimenti

ho guardato il codice sorgente di Mongo rubino gemma e pensano che questa:

# 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={})

Quindi, ho fatto questo nel codice:

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

Vedere lo script Sinatra lavorare qui: http://github.com/acani/acani-sinatra/ blob / master / acani.rb # L97

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top