Câu hỏi tuyệt vời. Đầu tiên, hãy để tôi phác thảo một chút về cách thức hoạt động của mối quan hệ N:N, sau đó tôi sẽ đi vào chi tiết từng điểm nhấn của bạn.
N:N trong MySQL thông thường, bạn có bảng tổng hợp liên kết giữa người dùng và sở thích của bạn (bảng user_interests). Trong mongo, bạn làm điều này hơi khác một chút. Bạn vẫn có người dùng và bộ sưu tập sở thích, tuy nhiên thay vào đó, bây giờ bạn lưu trữ danh sách các khóa theo sở thích cho người dùng. VẬY một cái gì đó như thế này:
User Collection {
"name":"Josh",
"user":"jsmith",
"interests":[
{
"_id":12345,
"rating":"like"
},
{..}..
]
}
Bằng cách lưu trữ sở thích của bạn trong một danh sách được khóa trên bảng sở thích, bạn có thể thực hiện từng hành động mà bạn yêu cầu. Nếu bạn muốn thực hiện một truy vấn, bạn sẽ tạo nó dựa trên ID có trong bảng sở thích, sau đó thực hiện một truy vấn bằng cách sử dụng $ in modifier .
Bây giờ đối với bộ sưu tập sở thích của bạn, tôi sẽ làm như sau:
User Interest {
"_id":objectId
"label":"Swimming",
"count":intValue
}
Khi thêm sở thích vào tài liệu người dùng, biến số sau đó sẽ phụ thuộc vào định nghĩa xếp hạng của bạn. Nếu bạn đang lưu trữ xếp hạng của mình trong một khu vực riêng biệt (hoặc theo logic), thì giá trị bạn đã gán cho chúng sẽ là giá trị mà bạn liên hệ sau đó với giá trị int mà bạn quan tâm. IE:Người dùng đánh giá nó meh (có giá trị là 1), sau đó bạn sẽ thêm 1 vào giá trị đếm.
Hy vọng rằng điều này hữu ích và ít nhất cũng mang lại một số ý tưởng khác về cách cấu trúc nó!
Chúc may mắn, hãy nhớ MONGO LÀ TUYỆT VỜI.