Запрос агрегации Jaspersoft mongo использует параметр в выражении соответствия, чтобы получить один или все результаты

#mongodb #jasper-reports #jasperserver

#mongodb #jasper-отчеты #jasperserver

Вопрос:

Я разработал отчет JasperReports с источником данных MongoDB. Смотрите мой конвейерный запрос mongodb ниже:

 {
   runCommand:{
        aggregate:"my_collection",
        pipeline:[
                    {$match :
                    {$and : [
                                { tenant_id: 1},    
                                { $or: [ { $P{Location}: -1 }, { location : $P{Location}} ] },
                 ]}},
                {
                $project : {
                            product_attribute_value : 1,
                            inventory_on_hand : 1   ,
                            unit_cost : 1
                        }
                },

                {
                                $group : {
                                            _id : "$product_attribute_value",
                                            itemsCount: { $sum : 1 },
                                            inventoryValue:{$multiply : ["$inventory_on_hand", "$unit_cost"] },
                                            }
                                }
                }                                                           
        ]
    }
}
  

У меня есть параметр location с соответствующим элементом управления вводом в виде выпадающего списка. Я хочу сгруппировать данные на основе изменения в раскрывающемся списке местоположения. В раскрывающемся списке location по умолчанию указано значение ALL. Когда пользователь выбирает ВСЕ, значение параметра будет равно -1, и я хочу получить записи для всех местоположений. Но $P{Location} это недопустимое поле mongo, поэтому оно не работает.

Я знаю другой способ, у меня есть стадия проекта перед сопоставлением и есть литерал, определенный со значением -1, и использовать этот литерал на стадии сопоставления, но если я использую project перед этапом сопоставления, он извлечет все данные, а затем применит сопоставление. Это приведет к снижению производительности. Я не хочу этого делать. Я хочу сначала применить фильтры, а затем передать отфильтрованные документы этапам конвейера.

Пожалуйста, предложите мне альтернативу.

Комментарии:

1. I have a location parameter with corresponding input control as a dropdown. — Вы говорите о сервере JasperReports?

2. Да, я использую сервер JasperReports для отчетов и mongodb в качестве базы данных.