4

GridFS にはアップサートがありますか?

たとえば、指定した _id を持つ画像を保存したい場合、同じ _id を持つ画像が既に存在する場合、上書き (更新) します。それ以外の場合は挿入します。

4

2 に答える 2

4

技術的には複数のドキュメントを変更しているため、この仕様はアップサートをサポートするように実際には設計されておらず、確かにトリッキーな競合状態が発生する可能性があります。そのため、Matt が行ったこと、つまり、最初に削除してから配置することをお勧めします。

于 2010-08-05T12:36:49.303 に答える
3

私は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)

ここで実際のシナトラ スクリプトを参照してください: http://github.com/acani/acani-sinatra/blob/master/acani.rb#L97

于 2010-08-05T05:58:14.990 に答える