2010-08-05 5 views
4

Est-ce que GridFS a un upsert? Par exemple, si je veux enregistrer une image avec un _id spécifié, et qu'une autre avec ce même _id existe déjà, je veux l'écraser (mettre à jour). Sinon, insérez-le.GridFS dans Ruby: comment augmenter?

Répondre

4

La spécification n'est pas vraiment conçue pour supporter les upserts, puisque vous modifiez techniquement plus d'un document, et les conditions de course difficiles peuvent certainement survenir. Nous recommandons donc ce que Matt a fait, c'est-à-dire supprimer d'abord et ensuite mettre.

3

J'ai regardé le code source de pierres précieuses rubis mongo et trouvé ceci:

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

Alors, je l'ai fait dans le code:

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

Voir le script sinatra travaillant ici: http://github.com/acani/acani-sinatra/blob/master/acani.rb#L97

Questions connexes