在我的Rails应用程序中,我使用MongoID和一个Elasticsearch河来进行文本搜索。
对于@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)...but我是rails新手,不知道如何在控制器或模型中使用moped表达式。
关于如何在MongoId中提取匹配的'device_id‘字段,您有什么想法吗?
发布于 2015-03-06 00:40:17
Mongoid现在有了一个pluck函数。
mongoid#pluck
发布于 2015-01-15 03:39:38
您可以像这样获得一个轻便摩托车集合
Band.collection.find.select(name: 1)发布于 2015-07-27 14:21:02
看起来你实际上并不是在用那个调用构建一个Mongoid标准,但我没有研究过elasticsearch-rails,所以我不能百分之百确定。
如果你完全不能更新到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)https://stackoverflow.com/questions/27950979
复制相似问题