Bạn có thể tránh N + 1
-vấn đề của hàng trăm yêu cầu sử dụng $ in
-truy vấn. Hãy xem xét điều này:
Post {
PosterId: ObjectId
Text: string
Comments: [ObjectId, ObjectId, ...] // option 1
}
Comment {
PostId: ObjectId // option 2 (better)
Created: dateTime,
AuthorName: string,
AuthorId: ObjectId,
Text: string
}
Giờ đây, bạn có thể tìm thấy các nhận xét về bài đăng bằng $ in
và bạn cũng có thể dễ dàng tìm thấy tất cả các nhận xét của một tác giả cụ thể.
Tất nhiên, bạn cũng có thể lưu trữ các nhận xét dưới dạng một mảng được nhúng trong bài đăng và thực hiện $ in
truy vấn thông tin người dùng khi bạn tìm nạp các nhận xét. Bằng cách đó, bạn không cần phải khử chuẩn hóa tên người dùng và vẫn không cần hàng trăm truy vấn.
Nếu bạn chọn không chuẩn hóa tên người dùng, bạn sẽ phải cập nhật tất cả nhận xét của người dùng đó khi người dùng thay đổi, ví dụ:tên của anh ấy. Mặt khác, nếu các hoạt động như vậy không thường xuyên xảy ra, thì đó không phải là vấn đề lớn. Hoặc có thể tốt hơn nữa là lưu trữ tên mà người dùng có khi họ đưa ra nhận xét, tùy thuộc vào yêu cầu của bạn.
Một vấn đề chung với việc nhúng là những người viết khác nhau sẽ viết cho cùng một đối tượng
, vì vậy bạn sẽ phải sử dụng công cụ sửa đổi nguyên tử
(chẳng hạn như $ push
). Điều này đôi khi khó sử dụng hơn với người lập bản đồ (tôi không biết mongoalchemy) và thường kém linh hoạt hơn.