#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 в качестве базы данных.