Я вижу несколько решений для вашей проблемы:
Редкие обновления
Чтобы избежать объединений, которые должны выполняться на стороне клиента в базах данных NoSQL, соберите все в одну коллекцию.Если вы обновляете не очень часто, вы можете выполнить
{
_id,
LastAccessDate,
HasException,
Account : {
AccountID,
UserName,
Email },
Device : {
DeviceID,
DeviceCode }
}
. Это приводит к дублированию данных, но если производительность (без объединений) выше эффективности памяти, это, вероятно, подходящее решение для вас.Поскольку данные хранятся несколько раз, обновления более требовательны к серверу.Т.е. обновление адреса электронной почты выглядело бы как
db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "new@email.com"} });
Поскольку вам больше не нужны AccountID и DeviceID для присоединения, вы также можете удалить эти два поля.
Частые обновления
Когда у вас частые обновления, вместо встраивания вы можете использовать ссылки.Я думаю, что вы должны решить их на стороне клиента.Тогда у вас есть три коллекции:
Аккаунт:
{
_id,
UserName,
Email
}
Устройство:
{
_id,
DeviceCode
}
Ассоциация:
{
_id,
account : {
"$ref" : "Account",
"$id" : ... }
device : {
"$ref" : "Device",
"$id" : ... }
}
Таким образом, у вас нет дубликатов, но вы должны иметь дело со ссылками.