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

MongoRepository findByCreatedAtBetween nevrací přesné výsledky

Když to rozebereme, dotaz s klíčovým slovem Between se spouští proti databázi MongoDB s logickým výsledkem {"createdAt" : {"$gt" : d1, "$lt" : d2}} takže existuje šance, že nezískáváte dokumenty, které mají createdAt datum včetně v daném časovém období, tj. d1 < createdAt < d2 protože dané časové období nesplňuje kritéria. Pro informaci jsou zde některé z interpretací na metody dotazů :

Podporovaná klíčová slova pro metody dotazu

Keyword     Sample                              Logical result
After       findByBirthdateAfter(Date date)     {"birthdate" : {"$gt" : date}}
Before      findByBirthdateBefore(Date date)    {"birthdate" : {"$lt" : date}}
Between     findByAgeBetween(int from, int to)  {"age" : {"$gt" : from, "$lt" : to}}

Jako náhradní řešení možná budete chtít použít @Query anotace. Netestoval jsem to, ale možná budete chtít vyzkoušet následující příklad implementace vlastního dotazu:

public interface UserRepository extends MongoRepository<User, String>  {
    @Query(value = "{ 'createdAt' : {$gte : ?0, $lte: ?1 }}")
    public ArrayList<User> findbyCreatedAtBetween(Date from, Date to);
}

Pokud pro vás výše uvedené nefunguje, vytvořte vlastní rozhraní a svou implementační třídu pro provedení vlastního dotazu. Vytvořte například rozhraní s názvem, ke kterému se připojí Custom :

public interface UserRepositoryCustom {
    public List<User> findbyCreatedAtBetween(Date from, Date to); 
}

Upravte UserRepository a přidejte UserRepositoryCustom rozhraní, které má být rozšířeno:

@Repository
public interface UserRepository extends UserRepositoryCustom, MongoRepository {

}

Vytvořte svou implementační třídu pro implementaci metod definovaných v UserRepositoryCustom rozhraní.

public class UserRepositoryImpl implements UserRepositoryCustom {

    @Autowired
    MongoTemplate mongoTemplate;

    @Override
    public ArrayList<User> findbyCreatedAtBetween(Date from, Date to) {
        return mongoTemplate.find(
            Query.addCriteria(Criteria.where("createdAt").gte(from).lte(to));
    }
}



  1. Spark a aplikace MongoDB v Scala 2.10 maven builded error

  2. Pravidlo MongoDB pro odstranění řádku, pokud určitý sloupec obsahuje konkrétní hodnotu

  3. Virtuální osídlení s Mongoose

  4. Nainstalujte ovladače phpMongo do systému Windows