sql >> Databasteknik >  >> NoSQL >> MongoDB

spring-data-mongo - valfria frågeparametrar?

För att implementera detta i boolesk logik gör jag följande och konverteringen till operationer som är tillgängliga i programmeringsspråk

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

I vanlig SQL görs detta som

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

I MongoDB görs detta genom $where

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

Vi kan påskynda det här lite genom att använda Mongo Operations istället för att bygga allt till funktionen på bekostnad av viss läsbarhet. fungerar inte tyvärr.

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

Så vad du har är

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

Detta kan utökas ytterligare för att hantera arrayer för in/all-satser

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


  1. 3 sätt att skapa ett index i MongoDB

  2. Hur ClusterControl utför automatisk databasåterställning och failover

  3. Mongo Aggregation:$group och $project array för att invända för räkningar

  4. hur man konverterar sträng till numeriska värden i mongodb