iPhoneアプリにSinatra付きのMongoDBを使用しています。
usersMongoDB コレクションとpictureGridFS コレクションがあります。各ユーザーは 1 つの写真を持っているので、最初はObjectId、写真の を対応するユーザーと同じになるように設定しました。これにより、ユーザーの ObjectId が与えられると、たった 1 つのクエリでそのユーザーの画像を取得することが簡単になりました。次に、MD5 ハッシュが変更された場合にのみ iPhone が画像をダウンロードすることを認識できるように、画像の MD5 ハッシュをユーザー オブジェクトに保存することを計画していました。これは機能しますが、MD5 を取得するには Ruby クラスを変更する必要がありましたGrid
しかしその後、Kyle Banker は、MD5 の代わりに をユーザー オブジェクトに格納することを提案しました。picture_idしかし、それを行うと、 user が与えられた場合ObjectId、最初picture_idにユーザーからクエリを実行し、次に画像をクエリする必要があります (2 つのクエリ)。1 つのクエリで、指定されたユーザーの画像を取得する方法はありますObjectIdか? GridFS インデックスを読んで、ユーザーObjectIdを画像のメタデータに保存し、そのフィールドにインデックスを設定する方法があると思います。そうすれば、1 つのクエリで実行できます。それが正しければ、Ruby でそれを行うコードはどのようなものですか?
ああ、私も気にする必要がありますか?を使用して画像を簡単picture_idにクエリすることもできますが、これは今のところ実行しますが、構文の観点から、画像をクエリできると便利です (1 つのインデックス付き/高速クエリで)。によってuser_id。Facebook のグラフ API のようなものです。