Jag ser flera lösningar på ditt problem:
Uppdateringar sällan
För att undvika anslutningar, som måste göras på klientsidan i NoSQL-databaser, lägg allt i en samling. Om du inte uppdaterar så ofta kan du göra det
{
_id,
LastAccessDate,
HasException,
Account : {
AccountID,
UserName,
Email },
Device : {
DeviceID,
DeviceCode }
}
Detta resulterar i dubbla data, men om prestanda (inga kopplingar) kommer före minneseffektivitet är det förmodligen en lämplig lösning för dig. Eftersom data lagras flera gånger är uppdateringar mer krävande för servern. d.v.s. att uppdatera e-postadressen skulle se ut
db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });
Eftersom du inte behöver konto-ID och enhets-ID för att gå med längre, kan du även släppa dessa två fält.
Täta uppdateringar
När du har frekventa uppdateringar, istället för att bädda in, kan du använda referenser. Jag tror att du måste lösa dem på klientsidan. Du har då tre samlingar:
Konto:
{
_id,
UserName,
Email
}
Enhet:
{
_id,
DeviceCode
}
Association:
{
_id,
account : {
"$ref" : "Account",
"$id" : ... }
device : {
"$ref" : "Device",
"$id" : ... }
}
Du har ingen dubblering på det här sättet, men du måste hantera referenser.