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

Truy vấn động MongoRepository

Dưới đây là giải pháp mà tôi đã đưa ra. Vì vậy, chỉ để tóm tắt lại, vấn đề mà tôi gặp phải, là tôi không thể thực hiện một truy vấn được cung cấp một đối tượng Truy vấn làm đầu vào để tăng tính linh hoạt đối với các tiêu chí lọc. Giải pháp hóa ra khá đơn giản, tôi chỉ cần đọc kỹ tài liệu :).

  1. bước

Mở rộng MongoRepository và thêm các chức năng tùy chỉnh của bạn:

@NoRepositoryBean
public interface ResourceRepository<T, I extends Serializable> extends MongoRepository<T, I> {

    Page<T> findAll(Query query, Pageable pageable);
}
  1. bước

Tạo một triển khai cho giao diện này:

public class ResourceRepositoryImpl<T, I extends Serializable> extends SimpleMongoRepository<T, I> implements ResourceRepository<T, I> {

    private MongoOperations mongoOperations;
    private MongoEntityInformation entityInformation;

    public ResourceRepositoryImpl(final MongoEntityInformation entityInformation, final MongoOperations mongoOperations) {
        super(entityInformation, mongoOperations);

        this.entityInformation = entityInformation;
        this.mongoOperations = mongoOperations;
    }

    @Override
    public Page<T> findAll(final Query query, final Pageable pageable) {
        Assert.notNull(query, "Query must not be null!");

        return new PageImpl<T>(
                mongoOperations.find(query.with(pageable), entityInformation.getJavaType(), entityInformation.getCollectionName()),
                pageable,
                mongoOperations.count(query, entityInformation.getJavaType(), entityInformation.getCollectionName())
        );
    }
}
  1. bước

Đặt triển khai của bạn làm triển khai MongoRepository mặc định:

@EnableMongoRepositories(repositoryBaseClass = ResourceRepositoryImpl.class)
public class MySpringApplication {
    public static void main(final String[] args) {
        SpringApplication.run(MySpringApplication.class, args);
    }
}
  1. bước

Tạo kho lưu trữ cho đối tượng tùy chỉnh của bạn:

public interface CustomObjectRepo extends ResourceRepository<CustomObject, String> {
}

Bây giờ nếu bạn có nhiều đối tượng mà bạn muốn lưu trong kho tài liệu mongo, chỉ cần xác định một giao diện mở rộng ResourceRepository của bạn là đủ (như đã thấy ở bước 4), và bạn sẽ có sẵn Page<T> findAll(Query query, Pageable pageable) phương pháp truy vấn tùy chỉnh. Tôi nhận thấy giải pháp này là giải pháp thanh lịch nhất trong số các giải pháp tôi đã thử.

Nếu bạn có bất kỳ đề xuất cải tiến nào, vui lòng chia sẻ chúng với cộng đồng.

Trân trọng, Cristian



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ atanh

  2. Đặt thời gian chờ Mongo trong Spring Boot

  3. Mongoose, cập nhật giá trị trong mảng đối tượng

  4. mongodb không thể khởi động trên windows?

  5. Xóa bằng _id trong bảng điều khiển MongoDB