Pregunta

GridFS sí tiene un upsert?

Por ejemplo, si quiero guardar una imagen con un _id especificado, y una con el mismo _id ya existe, lo quiero para sobrescribir (actualización) de ella. De lo contrario, insertarlo.

¿Fue útil?

Solución

La especificación no es realmente diseñado para upserts de apoyo, ya que está técnicamente modificar más de un documento, y sin duda puede surgir condiciones de carrera difíciles. Por lo que recomendamos lo que Matt ha hecho, que es eliminar primero y luego poner.

Otros consejos

Me miraba el código fuente gema mongo rubí y encontró lo siguiente:

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

Por lo tanto, hice esto en el código:

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

Consulte el guión Sinatra trabajar aquí: http://github.com/acani/acani-sinatra/ blob / maestro / acani.rb # L97

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top