あなたの問題には複数の解決策があります:
めったに更新されない
NoSQLデータベースでクライアント側で実行する必要がある結合を回避するには、すべてを1つのコレクションにまとめます。頻繁に更新しない場合は、更新できます
{
_id,
LastAccessDate,
HasException,
Account : {
AccountID,
UserName,
Email },
Device : {
DeviceID,
DeviceCode }
}
これによりデータが重複しますが、パフォーマンス(結合なし)がメモリ効率よりも優先される場合は、おそらく適切なソリューションです。データは複数回保存されるため、サーバーの更新はより要求されます。つまりメールアドレスの更新は次のようになります
db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });
AccountIDとDeviceIDを結合する必要がなくなったため、これら2つのフィールドを削除することもできます。
頻繁な更新
頻繁に更新する場合は、埋め込む代わりに参照を使用できます。クライアント側で解決する必要があると思います。次に、3つのコレクションがあります。
アカウント:
{
_id,
UserName,
Email
}
デバイス:
{
_id,
DeviceCode
}
関連付け:
{
_id,
account : {
"$ref" : "Account",
"$id" : ... }
device : {
"$ref" : "Device",
"$id" : ... }
}
この方法で重複することはありませんが、参照を処理する必要があります。