MongoDB Gridfs Encecência de consulta individual em Ruby
Pergunta
Estou usando o MongoDB com Sinatra para um aplicativo para iPhone.
eu tenho um users
Coleção MongoDB e um picture
Coleção Gridfs. Cada usuário tem uma imagem, então, inicialmente, eu apenas defini o ObjectId
Para que a imagem seja a mesma que o usuário correspondente. Isso facilitou, Dado o objeto do usuário, obtenha a imagem desse usuário com apenas uma consulta. Então, eu estava planejando armazenar o hash do MD5 da imagem no objeto do usuário para que o iPhone soubesse baixar a imagem apenas se o hash do MD5 tivesse mudado. Isso funcionaria, mas eu tive que modifique o Grid
Aula de rubi para obter o md5
Mas então, Kyle Banker sugerido que eu acabei de armazenar o picture_id
, em vez do MD5, no objeto do usuário. Mas, se eu fizer isso, dado a um usuário ObjectId
, Eu teria que primeiro consultar o picture_id
do usuário e, em seguida, consulte a imagem (2 consultas). Existe uma maneira, em uma consulta, para obter a imagem dada a um usuário ObjectId
? Lendo Índices Gridfs, Acho que há uma maneira de armazenar o usuário ObjectId
nos meta -dados da figura e defina um índice nesse campo. Dessa forma, eu poderia fazer isso em uma consulta. Se estiver correto, como é o código fazer isso em Ruby?
Infelizmente, eu deveria me incomodar? Eu poderia usar com facilidade o picture_id
Para consultar a imagem, que é o que farei por enquanto, mas também seria bom, de uma perspectiva sintática, poder consultar a imagem (em uma consulta indexada/rápida) pela user_id
. Como a API do gráfico do Facebook permite que você faça, por exemplo, http://graph.facebook.com/mattdipasquale/picture.
Solução
Claro. Como você sugere, basta armazenar o user_id em algum lugar no objeto de arquivo da imagem e criar um índice nesse campo.