MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoRepository findByCreateAtBetween không trả về kết quả chính xác

Chia nhỏ, truy vấn với từ khóa Between đang được thực thi dựa trên cơ sở dữ liệu MongoDB với kết quả lôgic {"createdAt" : {"$gt" : d1, "$lt" : d2}} vì vậy có khả năng bạn không nhận được tài liệu có createdAt bao gồm ngày trong phạm vi ngày nhất định, tức là d1 < createdAt < d2 vì phạm vi ngày nhất định không đáp ứng tiêu chí. Để tham khảo, đây là một số diễn giải về phương pháp truy vấn :

Từ khóa được hỗ trợ cho các phương pháp truy vấn

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}}

Để giải quyết vấn đề, bạn có thể muốn sử dụng @Query chú thích. Tôi chưa thử nghiệm điều này nhưng bạn có thể muốn thử ví dụ triển khai truy vấn tùy chỉnh sau:

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

Nếu cách trên không hiệu quả với bạn, hãy tạo giao diện tùy chỉnh và lớp triển khai của bạn để thực hiện truy vấn tùy chỉnh. Ví dụ:tạo một giao diện có tên thêm vào Custom :

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

Sửa đổi UserRepository và thêm UserRepositoryCustom giao diện được mở rộng:

@Repository
public interface UserRepository extends UserRepositoryCustom, MongoRepository {

}

Tạo lớp triển khai của bạn để triển khai các phương thức được xác định trong UserRepositoryCustom giao diện.

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. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách đăng ký và gọi một lược đồ trong mongoose

  2. Mongo DB có chế độ Trong bộ nhớ không?

  3. thông báo lỗi cú pháp mongoexport

  4. Không thể truy vấn mongoDB với mongoose trong node.js

  5. Tài liệu ngẫu nhiên từ MongoDB sử dụng dữ liệu mùa xuân