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

Ánh xạ POJO hiệu quả đến / từ Java Mongo DBObject sử dụng Jackson

Bạn có thể sử dụng chú thích Mixin để chú thích POJO của mình và BasicDBObject (hoặc DBObject ), vì vậy chú thích không phải là một vấn đề. Kể từ BasicDBOject là một bản đồ, bạn có thể sử dụng @JsonAnySetter trên phương pháp đưa.

m_objectMapper.addMixInAnnotations(YourMixIn.class, BasicDBObject.class);

public interface YourMixIn.class {
    @JsonAnySetter
    void put(String key, Object value);
}

Đây là tất cả những gì tôi có thể nghĩ ra vì tôi không có kinh nghiệm với Đối tượng MongoDB.

Cập nhật: MixIn về cơ bản là một cơ chế Jackson để thêm chú thích vào một lớp mà không cần sửa đổi lớp đã nói. Điều này hoàn toàn phù hợp khi bạn không có quyền kiểm soát lớp bạn muốn điều chỉnh (như khi nó từ một lọ bên ngoài) hoặc khi bạn không muốn làm lộn xộn các lớp của mình bằng chú thích.

Trong trường hợp của bạn ở đây, bạn đã nói rằng BasicDBObject triển khai Map giao diện, để lớp đó có phương thức put , như được xác định bởi giao diện bản đồ. Bằng cách thêm @JsonAnySetter với phương thức đó, bạn nói với Jackson rằng bất cứ khi nào anh ta tìm thấy một thuộc tính mà anh ta không biết sau khi xem xét nội bộ của lớp để sử dụng phương thức để chèn thuộc tính vào đối tượng. Chìa khóa là tên của thuộc tính và giá trị, tốt, là giá trị của thuộc tính.

Tất cả những điều này kết hợp làm cho bản đồ trung gian biến mất, vì Jackson sẽ trực tiếp chuyển đổi thành BasicDBOject bởi vì bây giờ nó biết cách giải mã lớp đó khỏi Json. Với cấu hình đó, bạn có thể thực hiện:

DBObject dbo = m_objectMapper.convertValue(pojo, BasicDBObject.class);

Lưu ý rằng tôi chưa thử nghiệm điều này vì tôi không làm việc với MongoDB, vì vậy có thể có một số kết thúc lỏng lẻo. Tuy nhiên, tôi đã sử dụng cơ chế tương tự cho các trường hợp sử dụng tương tự mà không gặp vấn đề gì. YMMV tùy thuộc vào các lớp.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. lỗi khi theo dõi Ứng dụng Tumblelog với Flask và MongoEngine

  2. Làm thế nào để tạo lược đồ Mongoose với Mảng ID đối tượng?

  3. Lặp lại Bộ sưu tập Mongo và cập nhật một trường trong mọi tài liệu

  4. Mongodb và sắp xếp mảng phụ

  5. Mongodb tránh các mục nhập trùng lặp