我在我的 Rails 5 项目中使用 mongoid 6.1.0 聚合框架。$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?
不能包含在聚合框架中。还有其他替代解决方案吗?