内訳を見ると、キーワードBetween
を使用したクエリ MongoDBデータベースに対して実行され、論理結果は{"createdAt" : {"$gt" : d1, "$lt" : d2}}
そのため、createdAt
を持つドキュメントを取得できない可能性があります 指定された日付範囲内の日付(d1 < createdAt < d2
) 指定された日付範囲が基準を満たしていないためです。参考までに、これらは クエリメソッド
:
クエリメソッドでサポートされているキーワード
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}}
回避策として、 @Query
注釈。これはテストしていませんが、次のカスタムクエリの実装例を試してみてください。
public interface UserRepository extends MongoRepository<User, String> {
@Query(value = "{ 'createdAt' : {$gte : ?0, $lte: ?1 }}")
public ArrayList<User> findbyCreatedAtBetween(Date from, Date to);
}
上記がうまくいかない場合は、カスタムインターフェイスと実装クラスを作成してカスタムクエリを実行します。たとえば、Custom
を追加する名前のインターフェースを作成します :
public interface UserRepositoryCustom {
public List<User> findbyCreatedAtBetween(Date from, Date to);
}
UserRepository
を変更します UserRepositoryCustom
を追加します 拡張するインターフェース:
@Repository
public interface UserRepository extends UserRepositoryCustom, MongoRepository {
}
UserRepositoryCustom
で定義されたメソッドを実装するための実装クラスを作成します インターフェース。
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));
}
}