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

Mongoid store_in tạo ra kết quả ngẫu nhiên

Tôi đã mất một lúc nhưng tôi đã tìm ra câu trả lời. Tôi quyết định đăng nó, hy vọng nó sẽ giúp ích cho những người khác.

Mongoid thực hiện một cái gì đó được gọi là "kế thừa bảng đơn". Ngay sau khi bạn lấy một lớp con từ một lớp cha, lớp con sẽ được lưu trữ trong tập hợp cha thêm một thuộc tính "type". Sử dụng "store_in" cho mongodb biết rõ ràng bộ sưu tập nào sẽ lưu trữ tài liệu. Việc xác định store_in trong lớp con làm cho mongoid lưu trữ mọi thứ (bao gồm cả cha) trong bộ sưu tập đã cho. Tôi đoán việc sử dụng một nhiệm vụ store_in dành riêng cho mỗi đứa trẻ sẽ làm rối tung lên. Tuy nhiên, kết quả là các tài liệu được lưu trữ ngẫu nhiên trong bất kỳ bộ sưu tập nào đã cho.

Điều này có thể được giải quyết trong Ruby bằng cách sử dụng một mô-đun làm mixin cho chức năng chung. Điều này được mô tả khá tốt trong tài liệu này .

NHƯNG tôi quyết định không làm điều này sau cùng! Lý do tại sao tôi muốn điều này là để giữ cho bộ sưu tập của tôi nhỏ, hy vọng sẽ có được hiệu suất tốt hơn. Sau khi nói chuyện với một số chuyên gia (10gen), tôi nghĩ cách tiếp cận tốt hơn là sử dụng tập hợp đối tượng cha đơn cho tất cả các phần tử con. Sẽ không có tác động đến hiệu suất của mongodb nhưng giải pháp trở nên linh hoạt hơn nhiều. Trên thực tế, điều này giúp sử dụng tốt hơn nhiều thiết kế schemaless trong mongodb.

Vì vậy, mã sẽ giống như sau:

class BaseClass
  include Mongoid::Document

  ... shared functionality

end

class ChildClass1 < BaseClass
  ...individual functionality...
end  

class ChildClass2 < BaseClass
  ...individual functionality...
end



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Truy vấn, lọc và cập nhật các mảng lồng nhau nhiều cấp trong MongoDB bằng C #

  2. Mongodb nâng cấp tài liệu nhúng

  3. Chèn hoặc cập nhật vào Mongo bằng cách sử dụng mongoose và sửa đổi các phần tử bên trong khi cập nhật

  4. Moongoose tổng hợp $ trận đấu không khớp với id's

  5. 'autoIndexID' không phải là một tùy chọn thu thập hợp lệ - mongoDB