iPhoneアプリにSinatra付きのMongoDBを使用しています。
users
MongoDB コレクションとpicture
GridFS コレクションがあります。各ユーザーは 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 のようなものです。