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

Spring-Data mongodb truy vấn nhiều lớp được lưu trữ trong cùng một bộ sưu tập

Đây ít nhiều là một câu hỏi về cách thiết kế bộ sưu tập của bạn. Vì Mongo không biết gì về các loại, chúng tôi phải thêm siêu dữ liệu bổ sung để có thể phân biệt các tài liệu với nhau. Vì vậy, khi truy vấn, bạn cũng cần phải thêm các ràng buộc này vào truy vấn. Lưu ý rằng bạn có thể tham khảo _class nhập qua DefaultMongoTypeMapper.DEFAULT_TYPE_KEY .

Chúng tôi đã nghĩ đến việc thêm một số API vào truy vấn để thể hiện một người chỉ muốn nhận các tài liệu thuộc loại nhất định như thế này:

mongo.find(new Query(Teacher.class), Teacher.class);

Vẫn có cảm giác hơi kỳ lạ khi bạn phải xác định lớp miền hai lần (điều này hợp lý nếu bạn muốn giới hạn kết quả cho các tài liệu thuộc một loại nhất định nhưng ánh xạ chúng vào một lớp khác). Ngoài ra, chúng tôi chỉ có thể hạn chế kết quả đối với các tài liệu mang chính xác điều đó kiểu vì các kiểu được lưu trữ dưới dạng Chuỗi và kế thừa chỉ có thể được áp dụng nếu lớp đã được tải. Vì vậy, khi truy vấn tài liệu có loại Person chúng tôi sẽ phải tải tất cả trước tiên, hãy cố gắng tra cứu loại, kiểm tra loại và có khả năng loại bỏ kết quả dưới mức tối ưu vì lý do hiệu suất.

Một tùy chọn khác sẽ là lưu trữ tất cả các kiểu mà một lớp có thể gán cho (hầu hết tất cả các giao diện và lớp cha ngoại trừ Object có thể) nhưng điều đó sẽ gây ra khá nhiều dữ liệu được lưu trữ. Đến lượt nó, điều này có thể được tiếp cận bằng cách thêm cờ vào @Document chú thích.

Điểm mấu chốt:hiện tại, không có cách nào khác ngoài việc tăng vé JIRA nếu bạn có đề xuất về cách cải thiện điều này.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nhận phần tử cụ thể từ mảng mongoDB

  2. Thử nghiệm api REST được xây dựng bằng Node.js (Express) trên Travis CI

  3. Cách lấy db.currentOp () từ trình điều khiển C # - mongodb

  4. MongoDB $ concat

  5. Chuyển đổi kiểu dữ liệu trong MongoDB