Widzę wiele rozwiązań Twojego problemu:
Rzadkie aktualizacje
Aby uniknąć złączeń, które muszą być wykonywane po stronie klienta w bazach danych NoSQL, umieść wszystko w jednej kolekcji. Jeśli nie aktualizujesz zbyt często, możesz to zrobić
{
_id,
LastAccessDate,
HasException,
Account : {
AccountID,
UserName,
Email },
Device : {
DeviceID,
DeviceCode }
}
Powoduje to zduplikowane dane, ale jeśli wydajność (brak łączeń) jest ważniejsza niż wydajność pamięci, jest to prawdopodobnie odpowiednie rozwiązanie dla Ciebie. Ponieważ dane są przechowywane wielokrotnie, aktualizacje są bardziej wymagające dla serwera. Tj. wyglądałaby aktualizacja adresu e-mail
db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });
Ponieważ nie potrzebujesz już AccountID i DeviceID, aby dołączyć, możesz również usunąć te dwa pola.
Częste aktualizacje
Jeśli masz częste aktualizacje, zamiast osadzania możesz użyć Referencji. Myślę, że musisz rozwiązać je po stronie klienta. Masz wtedy trzy kolekcje:
Konto:
{
_id,
UserName,
Email
}
Urządzenie:
{
_id,
DeviceCode
}
Powiązanie:
{
_id,
account : {
"$ref" : "Account",
"$id" : ... }
device : {
"$ref" : "Device",
"$id" : ... }
}
W ten sposób nie masz żadnych duplikatów, ale musisz radzić sobie z referencjami.