Vidím několik řešení vašeho problému:
Zřídka aktualizace
Abyste se vyhnuli spojením, která je třeba provádět na straně klienta v NoSQL databázích, dejte vše do jedné kolekce. Pokud neaktualizujete příliš často, můžete to udělat
{
_id,
LastAccessDate,
HasException,
Account : {
AccountID,
UserName,
Email },
Device : {
DeviceID,
DeviceCode }
}
To má za následek duplicitní data, ale pokud výkon (žádná spojení) předchází efektivitě paměti, je to pro vás pravděpodobně vhodné řešení. Protože se data ukládají vícekrát, aktualizace jsou pro server náročnější. Tj. aktualizace e-mailové adresy by vypadala takto
db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });
Protože k připojení již nepotřebujete AccountID a DeviceID, můžete tato dvě pole také vypustit.
Časté aktualizace
Pokud máte časté aktualizace, můžete místo vkládání použít reference. Myslím, že je musíte vyřešit na straně klienta. Pak máte tři kolekce:
Účet:
{
_id,
UserName,
Email
}
Zařízení:
{
_id,
DeviceCode
}
Přidružení:
{
_id,
account : {
"$ref" : "Account",
"$id" : ... }
device : {
"$ref" : "Device",
"$id" : ... }
}
Tímto způsobem nedochází k žádné duplicitě, ale musíte se vypořádat s referencemi.