Ik zie meerdere oplossingen voor uw probleem:
Zelden updates
Om joins te voorkomen, die client-side in NoSQL-databases moeten worden gedaan, moet u alles in één verzameling plaatsen. Als u niet vaak bijwerkt, zou u dat kunnen doen
{
_id,
LastAccessDate,
HasException,
Account : {
AccountID,
UserName,
Email },
Device : {
DeviceID,
DeviceCode }
}
Dit resulteert in dubbele gegevens, maar als prestaties (geen joins) belangrijker zijn dan geheugenefficiëntie, is dit waarschijnlijk een geschikte oplossing voor u. Omdat de gegevens meerdere keren worden opgeslagen, zijn updates veeleisender voor de server. D.w.z. het bijwerken van het e-mailadres zou er als volgt uitzien
db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });
Omdat je de AccountID en DeviceID niet meer nodig hebt om lid te worden, kun je deze twee velden ook laten vallen.
Veel voorkomende updates
Als je regelmatig updates hebt, kun je Referenties gebruiken in plaats van insluiten. Ik denk dat je ze client-side moet oplossen. Je hebt dan drie collecties:
Account:
{
_id,
UserName,
Email
}
Apparaat:
{
_id,
DeviceCode
}
Vereniging:
{
_id,
account : {
"$ref" : "Account",
"$id" : ... }
device : {
"$ref" : "Device",
"$id" : ... }
}
Op deze manier heb je geen duplicatie, maar heb je te maken met referenties.