繁体   English   中英

Rails Mongoid“采摘”相当于?

Rails Mongoid `pluck` equivalent?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

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

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

6 个回复

Mongoid现在具有pluck功能。

mongoid#勇气

您可以像这样获得一个Moped系列

 Band.collection.find.select(name: 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)

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

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

其中field_to_be_plucked是其值需要在Array中被拔出的字段的名称。

发现它....从我可以告诉这不是在MongoId文档.....

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

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

Band.all.distinct(:name)

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题
 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM