sql >> Databáze >  >> NoSQL >> MongoDB

spring-data-mongo - volitelné parametry dotazu?

Abych to implementoval v booleovské logice, udělám následující a převod na operace, které jsou dostupné v programovacích jazycích

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

V prostém SQL se to dělá jako

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

V MongoDB se to děje prostřednictvím $where

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

Můžeme to trochu urychlit používáním Mongo Operations místo toho, aby bylo vše sestavováno do funkce na úkor určité čitelnosti. bohužel nefunguje.

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

Takže to, co máte, je

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

To lze dále rozšířit tak, aby zpracovávalo pole pro klauzule in/all

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


  1. MongoDB, Mongoose:Jak najít vnořený dokument v nalezeném dokumentu?

  2. více instancí Mongo DB na stejném serveru

  3. Redis set vs hash

  4. jak zkontrolovat verzi instance redis?