如何在(Jasper Studio)的mongo DB查询中制作动态/可选过滤器(参数)

时间:2019-01-11 14:43:35

标签: sql mongodb jasper-reports

我正在创建一个Web应用程序,并且运行良好,但是最终用户需要根据其数据创建报告。

在报告页面上,我创建了一些txt框,用户可以在其中键入以进行过滤。这些txt框可能为空,我需要从数据库返回所有内容,或者可以填充某些参数。提醒我需要将txt框内容作为参数传递给JasperServer,它们将在查询中使用。

数据输入的示例是:

    txtName= empty (null), 
    txtCity= 'Belo Horizonte'

它应该生成一份报告,其中包含有关人们在贝洛奥里藏特(Belo Horizo​​nte)的生活状况的所有记录,无论姓名如何。

我用SQL编写而成,并且运行完美。在我尝试在mongo上使用相同的逻辑后,它不起作用。我已经尝试过使用$ lt,$ gt,$ lte,$ gte,$ exist,$ ne和其他聚合工具,但是我无法正确地做到这一点。

SQL:

select * from myfirstreports 
where ($P{city} is null or cidade =$P{city}) 
AND ($P{name} is null or nome =$P{name})

蒙哥:

{
    'collectionName' : 'myfirstreports',

   'findFields' : 
    {
        'nome': 1, 'numeros': 1, 'vulgo': 1, 'cidade': 1, 
        'usuResponsavelCadastro': 1, 'created_at': 1
    },

    findQuery  : 
    {
        $and: [ 
            {$or:[{ $P{city}: {$eq: null}}, {'cidade': $P{city}}]}, 
            { $or:[{$P{name}: {'$eq': null}}, {'nome': $P{name}}]}
                    ]
     }
}

1 个答案:

答案 0 :(得分:0)

我使用以下表达式:

$P{city}.equals(null)? "{ }" : "{'cidade': '$P!{city}'}"//Need to create a non prompting parameter
$P{name}.equals(null)? "{ }":  "{'nome': '$P!{name}'}"

$ P!{...}参数允许我创建一个字符串查询并传递给JasperSoft报告。