【问题标题】:Unordered selection documents from mongodb by ids来自 mongodb by ids 的无序选择文档
【发布时间】:2014-10-13 19:36:18
【问题描述】:

我有问题。我需要在 Rails 中使用 mongoid 从我的 mongodb 获取文档。我有一个 id 数组,例如 ["54397dea477269151d000000"、"543ad4bc477269c09f000000"、"543ad4bc474269c09f000000"]。如果我找到类似的文档:

Item.find(ids)

它返回一个有序的对象数组。但我需要对象等同于 ids 数组。有没有机会通过对数据库的一次选择请求获得它?

【问题讨论】:

    标签: ruby-on-rails mongodb mongoid


    【解决方案1】:

    最简单的方法是在 MongoDB 之外进行:

    ids   = [ ... ]
    items = Item.find(ids).sort_by { |i| ids.index(i.id) }
    

    如果您的 ids 是字符串而不是对象 ID,则您必须自己处理类型转换:

    ids   = %w[54397dea477269151d000000 543ad4bc477269c09f000000 543ad4bc474269c09f000000]
    items = Item.find(ids).sort_by { |i| ids.index(i.id.to_s) }
    

    如果你经常做这种事情,那么添加你自己的类方法:

    def self.find_in_order(ids)
      ids = ids.map(&:to_s) # Or force them to be object IDs instances and leave out the to_s below...
      find(ids).sort_by { |i| ids.index(i.id.to_s) }
    end
    

    在使用 MongoDB 时,这种“在 Ruby 中手动完成”的事情很常见。

    【讨论】:

    • 据我所知,MongoDB 的查询“语言”非常有限。
    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-09
    • 2011-06-21
    • 2012-02-10
    • 1970-01-01
    • 2017-10-17
    相关资源
    最近更新 更多