Nó được khuyến nghị nếu nó khả thi cho trường hợp sử dụng, nhưng nó thường không. Dữ liệu chuỗi thời gian là một ngoại lệ đáng chú ý. Nó không thực sự áp dụng với $addToSet
và $push
bởi vì họ có xu hướng tăng kích thước của tài liệu bằng cách phát triển một mảng.
Dừng lại. Bạn có chắc chắn muốn mảng liên tục phát triển với hàng chục nghìn mục nhập không? Bạn sẽ truy vấn muốn các mục nhập cụ thể trở lại? Bạn sẽ lập chỉ mục bất kỳ trường nào trong các mục nhập mảng? Bạn có thể muốn xem xét lại cấu trúc tài liệu của mình. Có thể bạn muốn mỗi data
mục nhập là một tài liệu riêng biệt với các trường như market
, type
, createdAt
nhân rộng trong mỗi? Bạn sẽ không phải lo lắng về việc di chuyển tài liệu.
Tại sao mảng sẽ tăng lên 75K mục nhập? Bạn có thể làm ít mục hơn cho mỗi tài liệu? Đây có phải là dữ liệu chuỗi thời gian không ? Thật tuyệt khi có thể phân bổ trước tài liệu và cập nhật tại chỗ bằng công cụ lưu trữ mmap, nhưng điều này không khả thi cho mọi trường hợp sử dụng và không phải là yêu cầu để MongoDB hoạt động tốt.
Không, điều này không thực sự hữu ích. Kích thước tài liệu sẽ được tính dựa trên kích thước BSON của các giá trị null trong mảng, vì vậy khi bạn thay thế null
với một loại khác, kích thước sẽ tăng lên và bạn vẫn sẽ nhận được tài liệu viết lại. Bạn sẽ cần định vị trước mảng với các đối tượng với tất cả các trường được đặt thành giá trị mặc định cho loại của nó, ví dụ:
{
"date" : ISODate("1970-01-01T00:00:00Z") // use a date type instead of a string date
"price" : 0,
"amount" : 0,
"tid" : "000000", // assuming 7 character code - strings icky for default preallocation
"type" : "none" // assuming it's "buy" or "sell", want a default as long as longest real values
}