Я использую MongoDB с Sinatra для приложения для iPhone.
У меня есть коллекция users
MongoDB и коллекция picture
GridFS. У каждого пользователя есть одно изображение, поэтому изначально я просто установил ObjectId
для изображения таким же, как у соответствующего пользователя. Это упростило, данный ObjectId пользователя, получение изображения этого пользователя всего одним запросом. Затем я планировал сохранить хеш MD5 изображения в пользовательском объекте, чтобы iPhone знал, что нужно загрузить изображение, только если хэш MD5 изменился. Это сработало бы, но мне пришлось изменить класс Grid
Ruby на получить MD5
Но тогда Кайл Банкер предложил просто сохранить picture_id
вместо MD5 в пользовательском объекте. Но, если я это сделаю, учитывая пользователя ObjectId
, мне придется сначала запросить picture_id
от пользователя, а затем запросить изображение (2 запроса). Есть ли способ одним запросом получить изображение с учетом ObjectId
пользователя? Читая индексы GridFS, я думаю, что есть способ сохраните ObjectId
пользователя в метаданных изображения, а затем установите индекс в этом поле. Таким образом, я мог бы сделать это в одном запросе. Если это так, как выглядит код для этого в Ruby?
Увы, стоит ли мне вообще заморачиваться? Я мог бы так же легко использовать picture_id
для запроса изображения, что я сейчас и сделаю, но с синтаксической точки зрения также было бы неплохо иметь возможность запрашивать изображение (в одном индексированном/быстром запросе ) по user_id
. Подобно тому, как Graph API от Facebook позволяет вам делать, например, http://graph.facebook.com/mattdipasquale/picture а>.