2
respostas

Ajuda - consulta não funciona

meu repository herda de ReactiveMongoRepository e na minha entidade tenho apenas o id e o lojaId, mas na tabela tem mais dados só que n usei logo deixei só esses acontece que fazendo o Mono existsAllByLojaIdIn(List lojasIds); eu quero verificar se TODOS da lista existem no banco de dados, somente se todos existirem, é true, havendo um que não existe, é false mas ele já pega true logo de cara bastando um existir

o que devo fazer?

(já coloquei in, sem in, com all, sem all... nada foi)
2 respostas

Olá Jade, tudo bem?

Pelo que entendi, você está tentando verificar se todos os IDs de uma lista existem no banco de dados e quer que o método retorne true apenas se todos existirem, certo?

O método existsAllByLojaIdIn(List<Integer> lojasIds) do Spring Data MongoDB, que você está tentando usar, irá retornar true se pelo menos um dos IDs existir no banco de dados, o que não é o que você quer.

Uma solução para o seu problema seria buscar todos os IDs que existem no banco de dados e comparar com a sua lista, retornando true apenas se todos os IDs da sua lista estiverem presentes. Veja um exemplo de como você poderia fazer isso:

public Mono<Boolean> existsAllByLojaIdIn(List<Integer> lojasIds) {
    // Busca todos os IDs no banco de dados
    Flux<Loja> lojasNoBanco = this.findAll();

    // Converte a lista de IDs para um conjunto para facilitar a comparação
    Set<Integer> idsNoBanco = lojasNoBanco.map(Loja::getId).collect(Collectors.toSet()).block();

    // Verifica se todos os IDs da lista existem no banco de dados
    return Mono.just(lojasIds.stream().allMatch(idsNoBanco::contains));
}

Por favor, note que esse código é apenas um exemplo e pode não funcionar perfeitamente no seu caso específico. Ele também pode ser ineficiente se você tiver muitos registros no banco de dados, pois está buscando todos os IDs. Dependendo do seu caso, pode ser necessário otimizar essa consulta.

Espero ter ajudado e bons estudos!

Olá, Jade

Para verificar se todos os lojaId na lista existem, você pode tentar uma abordagem diferente. Primeiro, você pode usar o método findAllByLojaIdIn para obter todos os registros que correspondem aos lojaId na lista. Em seguida, você pode comparar o tamanho da lista de registros retornados com o tamanho da lista de lojaId que você forneceu. Se os tamanhos forem iguais, então todos os lojaId existem. Se não forem, então pelo menos um lojaId não existe.

Aqui está um exemplo de como você pode fazer isso:

Mono<List<YourEntity>> entities = yourRepository.findAllByLojaIdIn(lojasIds);
entities.map(foundEntities -> {
    if (foundEntities.size() == lojasIds.size()) {
        return true;
    } else {
        return false;
    }
});

Note que YourEntity deve ser substituído pelo nome da sua entidade.

Lembre-se que essa é apenas uma sugestão e pode não ser a solução perfeita para o seu problema. Espero ter ajudado e bons estudos!