J'utilise MongoDB w/Sinatra pour une application iPhone.MongoDB GridFS l'efficacité de la requête one-to-one en Ruby
J'ai une collection MongoDB users
et une collection GridFS picture
. Chaque utilisateur a une image, donc, au départ, je viens de définir le ObjectId
pour que l'image soit la même que l'utilisateur correspondant. Cela a rendu facile, given the user's ObjectId, get the picture of that user with just one query. Ensuite, je prévoyais de stocker le hachage MD5 de l'image dans l'objet utilisateur afin que l'iPhone sache télécharger l'image uniquement si le hachage MD5 avait changé. Cela fonctionnerait, mais je devais modify the Grid
Ruby class to get the MD5
Mais, Kyle Bankersuggested que je le magasin juste picture_id
, au lieu du MD5, dans l'objet utilisateur. Mais, si je fais cela, étant donné un utilisateur ObjectId
, je devrais d'abord interroger le picture_id
de l'utilisateur, puis interroger l'image (2 requêtes). Existe-t-il un moyen, dans une requête, d'obtenir l'image donnée ObjectId
d'un utilisateur? En lisant GridFS indexes, je pense qu'il existe un moyen de stocker ObjectId
de l'utilisateur dans les métadonnées de l'image, puis de définir un index sur ce champ. De cette façon, je pourrais le faire dans une requête. Si c'est correct, à quoi ressemble le code dans Ruby?
Hélas, devrais-je même déranger? Je pourrais aussi facilement utiliser le picture_id
pour interroger l'image, ce que je ferai pour l'instant, mais ce serait sympa, d'un point de vue syntaxique, de pouvoir interroger l'image (dans une requête indexée/rapide)) par le user_id
. Un peu comme le graphique api de Facebook vous permet de faire, par exemple, http://graph.facebook.com/mattdipasquale/picture.
Cool. Je suis juste interroger par 'picuture_id' pour le moment. Mais, si je le voulais, devrais-je faire quelque chose comme: '@ grid.put (image,: metadata =>" 4ce533a41467286a14000269 ")' et 'coll.create_index (" metadata ")'? – ma11hew28
Vous devriez être capable de faire @ grid.put (image,: user_id => foo) –
Toutes les options passées qui ne sont pas des options officielles seront sauvegardées en tant que clés supplémentaires. Voir les documents de l'API: http://api.mongodb.org/ruby/1.1.2/Mongo/Grid.html –