Я использую инфраструктуру агрегации mongoid 6.1.0 в своем проекте Rails 5.Мне нужно добавить конвейер $match
, если значение поля поиска (текстовое или поле выбора) не пусто.В противном случае его следует игнорировать и не фильтровать результаты.Что-то вроде:
@messages = Message.collection.aggregate([
{ '$match' => {'month': {'$gte' => @fr_mnth, '$lte' => @to_mnth}}},
{ '$group' => {'_id': '$mmsi'} },
{ '$lookup' => {'from': 'ships', 'localField': "_id", 'foreignField': "mmsi", as: "ship"}},
{ '$match' => {"ship.n2": params[:n2] if !params[:n2].blank? }}
]).allow_disk_use(true)
или, если быть более понятным:
if not params[:n2].blank? { '$match' => {"ship.n2": params[:n2] }}
Проблема в том, что if !params[:n2].blank?
нельзя включить в структуру агрегирования.Есть ли другое альтернативное решение?