sql >> Database >  >> NoSQL >> MongoDB

spring-data-mongo - optionele queryparameters?

Om dit in Booleaanse logica te implementeren, doe ik het volgende en de conversie naar bewerkingen die beschikbaar zijn in programmeertalen

:query != null -> field == :query
!(:query != null) || (field == :query)
(:query == null) || (field == :query)

In gewone SQL wordt dit gedaan als

where (null = :query) or (field = :query)

In MongoDB gebeurt dit via de $where

{ $where: '?0 == null || this.field == ?0' } 

We kunnen dit een beetje versnellen door Mongo Operations te gebruiken in plaats van alles naar de functie te bouwen ten koste van enige leesbaarheid. werkt helaas niet.

{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] } 

Dus wat je hebt is

@Query("{ $or : [ { $where: '?0 == null' } , { field : ?0 } ] }")
List<Something> findAll(String query, Pageable pageable);

Dit kan verder worden uitgebreid om arrays voor in/alle clausules te verwerken

@Query("{ $or : [ { $where: '?0.length == 0' } , { field : { $in : ?0 } } ] }")
List<Something> findAll(String query, Pageable pageable);


  1. ioredis Sleutel met bijpassend patroon

  2. Wat is de meest volwassen MongoDB-driver voor C#?

  3. Hoe een array-index te projecteren na het afwikkelen van een array met het MongoDB-aggregatieframework

  4. Mongodb-service start niet