在我的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'字段的任何想法?
答案 0 :(得分:3)
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)
警告:仅当所有名称不同时(如果要删除重复项),则相关。