【问题标题】:MongoDB GridFS one-to-one query effeciency in RubyRuby 中的 MongoDB GridFS 一对一查询效率
【发布时间】:2010-11-18 04:41:28
【问题描述】:

我正在为 iPhone 应用程序使用带有 Sinatra 的 MongoDB。

我有一个users MongoDB 集合和一个picture GridFS 集合。每个用户都有一张图片,因此,最初,我只是将图片的ObjectId 设置为与相应用户相同。这很容易,given the user's ObjectId, get the picture of that user with just one query。然后,我打算将图片的 MD5 哈希值存储在用户对象中,以便 iPhone 知道只有在 MD5 哈希值发生变化时才下载图片。这可行,但我必须modify the Grid Ruby class to get the MD5

但是,Kyle Bankersuggested 我只是在用户对象中存储了picture_id,而不是 MD5。但是,如果我这样做,给定用户ObjectId,我必须首先从用户那里查询picture_id,然后查询图片(2 个查询)。有没有办法在一个查询中获取给定用户ObjectId 的图片?阅读GridFS indexes,我认为有一种方法可以将用户的ObjectId 存储在图片的元数据中,然后在该字段上设置索引。这样,我可以在一个查询中完成。如果这是正确的,那么在 Ruby 中执行此操作的代码是什么样的?

唉,我还要麻烦吗?我可以很容易地使用picture_id 来查询图片,这是我现在要做的,但从句法的角度来看,能够查询图片也很好(在一个索引/快速查询)由user_id。有点像 Facebook 的 graph api 让你做的事情,例如,http://graph.facebook.com/mattdipasquale/picture

【问题讨论】:

    标签: ruby mongodb gridfs


    【解决方案1】:

    当然。就像您建议的那样,只需将 user_id 存储在图片的文件对象中的某个位置,然后在该字段上建立一个索引。

    【讨论】:

    • 酷。我现在只是通过picuture_id 查询。但是,如果我愿意,我是否应该这样做:@grid.put(image, :metadata => "4ce533a41467286a14000269")coll.create_index("metadata")
    • 你应该可以做到@grid.put(image, :user_id => foo)
    • 通过的任何非官方选项的选项都将被保存为额外的键。请参阅 API 文档:api.mongodb.org/ruby/1.1.2/Mongo/Grid.html
    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2014-11-09
    • 2022-12-23
    • 1970-01-01
    相关资源
    最近更新 更多