Как сделать динамический / дополнительный фильтр (параметры) в запросе mongo DB в (Jasper Studio) - PullRequest
0 голосов
/ 11 января 2019

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

На странице отчета я создал несколько текстовых полей, которые пользователи будут вводить для фильтрации. Эти поля TXT могут быть пустыми, и мне нужно вернуть все из БД, или некоторые параметры могут быть заполнены. Вспоминая, что мне нужно передавать содержимое текстовых полей в качестве параметров JasperServer, и они будут использоваться в запросе.

Пример ввода данных:

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

Он должен генерировать отчет со всеми записями людей о том, как живет в Белу-Оризонти, независимо от имени.

Я сделал это на SQL и отлично работает. После того, как я попытался использовать ту же логику на монго, но она не работает. Я пробовал с $ lt, $ gt, $ lte, $ gte, $ Существовать, $ 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 голосов
/ 28 января 2019

Я использовал следующее выражение:

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

Параметры $ P! {...} позволяют мне создать запрос в виде строки и перейти к отчету JasperSoft.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...