Rails Mongoid“采摘”相当于?

时间:2015-01-14 19:34:34

标签: ruby-on-rails ruby-on-rails-3 mongoid mongoid3

在我的Rails应用程序中,我使用带有Elasticsearch河的MongoID进行文本搜索。

@devices_with_config = ConfigTextSearch.search params[:device_id] 我想只提取查询中匹配记录的device_id字段。在mongoID 3.1.0我可以使用Band.all.pluck(:name)。但不幸的是,我坚持使用3.0.23。

我看到有一个类似的轻便摩托车表达式collections[:bands].find.select(name: 1) ...但我是铁杆新手,无法弄清楚如何在控制器或模型中使用轻便摩托车表情。

关于如何在与MongoId的匹配中提取'device_id'字段的任何想法?

6 个答案:

答案 0 :(得分:3)

Mongoid现在有一个pluck功能。

mongoid#pluck

答案 1 :(得分:1)

你可以像这样获得一个Moped集合

 Band.collection.find.select(name: 1)

答案 2 :(得分:1)

看起来你实际上并没有用这个调用建立一个Mongoid标准,但是我还没有看过elasticsearch-rails所以我不能100%肯定。

如果您完全无法更新到3.1.0,那么您应该能够修改此功能。

module Mongoid
  class Criteria
    # select specific fields from collection based on current scope, returned as a hash
    def pluck(*fields)
      raise ArgumentError, 'Call this with at least one field' if fields.empty?

      collection.find(self.selector).select(Hash[fields.map { |field| [field, 1] }]).to_a
    end
  end
end

添加上述代码后,您应该可以执行以下操作:

Band.where(name: 'awesome').pluck(:id, :device_id)

答案 3 :(得分:1)

mongoid中定义的pluck方法的等价物是:

plucked_array = User.where(:name =>' xyz')。map(&amp ;: field_to_be_plucked)

field_to_be_plucked 是字段的名称,其值需要在Array中获取。

答案 4 :(得分:0)

发现它....从我所知道的,这不是关于MongoId文档......

sue = bob.results.map { |r| r._source.device_id }

答案 5 :(得分:0)

我用于同一目的,使用Mongoid 3.0:

Band.all.distinct(:name)

警告:仅当所有名称不同时(如果要删除重复项),则相关。