2010-11-18 14 views
0

私はiPhoneアプリケーション用のMongoDB w/Sinatraを使用しています。RubyのMongoDB GridFSの1対1のクエリ効率

私はusers MongoDBコレクションとpicture GridFSコレクションを持っています。各ユーザーには1つの画像しかないので、最初は対応するユーザーと同じ画像になるようにObjectIdを設定します。それは簡単に、given the user's ObjectId, get the picture of that user with just one queryになりました。その後、私は、MD5ハッシュが変更された場合にのみ、iPhoneが画像をダウンロードすることを知るように、ユーザーオブジェクトに画像のMD5ハッシュを保存することを計画していました。これは動作しますが、私はmodify the Grid Ruby class to get the MD5

に持っていた。しかし、私はちょうどユーザーオブジェクトに、代わりにMD5の、picture_idを保存し、その後、Kyle Bankersuggested。しかし、私はそれを行う場合、ユーザーObjectIdを与えられた、私は最初にユーザからpicture_idを照会し、次に画像(2つのクエリ)を照会しなければならないだろう。 1つのクエリで、ユーザーのObjectIdの画像を取得する方法はありますか? GridFS indexesを読んで、私は画像のメタデータにユーザのObjectIdを保存して、そのフィールドにインデックスを設定する方法があると思います。そうすれば、私は1つのクエリでそれを行うことができます。それが正しいのであれば、Rubyでこれを行うのはどのようなコードになっていますか?

ああ、私はさらに気にする必要がありますか? picture_idを使って画像を照会することもできますが、これは今のところ私がやることですが、構文上の観点から、画像を照会できるようにすることもできます(1つの索引付き/高速照会)をuser_idで指定します。 Facebookのグラフapiのように、たとえばhttp://graph.facebook.com/mattdipasquale/pictureのようにすることができます。

答えて

1

あなたの提案のように、画像のファイルオブジェクトのどこかにuser_idを格納し、そのフィールドにインデックスを作成するだけです。

+0

Cool。私は 'picuture_id'で今質問しています。しかし、もし私がしたいのであれば、 '@ grid.put(image、:metadata =>" 4ce533a41467286a14000269 ")'と 'coll.create_index(" metadata ")'のようなことをするべきですか? – ma11hew28

+0

@ grid.put(image、:user_id => foo)を実行できるはずです –

+0

公式のオプションではないオプションは、余分なキーとして保存されます。 APIのドキュメントをご覧ください:http://api.mongodb.org/ruby/1.1.2/Mongo/Grid.html –

関連する問題