Tôi thấy nhiều giải pháp cho vấn đề của bạn:
Ít khi cập nhật
Để tránh các phép nối phải được thực hiện ở phía máy khách trong cơ sở dữ liệu NoSQL, hãy đặt mọi thứ vào một bộ sưu tập. Nếu bạn không cập nhật thường xuyên, bạn có thể làm
{
_id,
LastAccessDate,
HasException,
Account : {
AccountID,
UserName,
Email },
Device : {
DeviceID,
DeviceCode }
}
Điều này dẫn đến dữ liệu trùng lặp, nhưng nếu hiệu suất (không có liên kết) đi trước hiệu quả của bộ nhớ, thì đó có thể là một giải pháp phù hợp cho bạn. Vì dữ liệu được lưu trữ nhiều lần nên các bản cập nhật sẽ đòi hỏi nhiều hơn đối với máy chủ. I E. cập nhật địa chỉ Email sẽ trông như thế nào
db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });
Vì bạn không cần AccountID và DeviceID để tham gia nữa, bạn cũng có thể bỏ hai trường này.
Cập nhật thường xuyên
Khi bạn có các bản cập nhật thường xuyên, thay vì nhúng, bạn có thể sử dụng Tài liệu tham khảo. Tôi nghĩ bạn phải giải quyết chúng ở phía khách hàng. Sau đó, bạn có ba bộ sưu tập:
Tài khoản:
{
_id,
UserName,
Email
}
Thiết bị:
{
_id,
DeviceCode
}
Liên kết:
{
_id,
account : {
"$ref" : "Account",
"$id" : ... }
device : {
"$ref" : "Device",
"$id" : ... }
}
Bạn không có bất kỳ sự trùng lặp nào theo cách này, nhưng bạn phải xử lý các tham chiếu.