[英]Rails Mongoid `pluck` equivalent?
在我的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'字段的任何想法?
Mongoid现在具有pluck
功能。
您可以像这样获得一个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.