Tôi giả sử:
{
g: [
{ _id: ObjectId(), property: '' },
// next
]
}
Loại cấu trúc cho câu hỏi này.
Không bình thường. _id
s là số nhận dạng duy nhất cho các thực thể. Như vậy nếu bạn đang muốn thêm _id
trong một đối tượng tài liệu con thì bạn có thể chưa chuẩn hóa dữ liệu của mình tốt lắm và đó có thể là dấu hiệu của một lỗ hổng cơ bản trong thiết kế lược đồ của bạn.
Tài liệu con được thiết kế để chứa dữ liệu lặp lại cho tài liệu đó, tức là địa chỉ hoặc người dùng hoặc thứ gì đó.
Điều đó đang được nói _id
không phải lúc nào cũng là một điều xấu để thêm vào. Lấy ví dụ tôi vừa nêu với các địa chỉ. Hãy tưởng tượng bạn có một hệ thống giỏ hàng và (vì lý do nào đó) bạn không sao chép địa chỉ vào tài liệu đặt hàng thì bạn sẽ sử dụng _id
hoặc một số định danh khác để lấy tài liệu con đó ra.
Ngoài ra, bạn phải xem xét việc liên kết các tài liệu. Nếu _id
đó mô tả một tài liệu khác và các thuộc tính là thuộc tính tùy chỉnh cho tài liệu đó liên quan đến tài liệu được liên kết đó thì điều đó cũng ổn.
Một ObjectId
vẫn còn khá lớn nên điều này cần xem xét đối với id nhỏ hơn, ít duy nhất hoặc không sử dụng _id
đối với các tài liệu phụ.
Đối với các chỉ mục, nó không thực sự hoạt động khác với _id
tiêu chuẩn trường trên chính tài liệu và một chỉ mục duy nhất trên toàn trường sẽ hoạt động trên toàn bộ tập hợp (tùy theo tình huống, hãy kiểm tra các truy vấn của bạn).
NB:MongoDB sẽ không thêm _id
tới các tài liệu phụ cho bạn.