MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie konvertiere ich viele-zu-viele-Beziehungen aus SQL in eine MongoDB-Sammlung?

Ich sehe mehrere Lösungen für Ihr Problem:

Seltene Updates

Um Joins zu vermeiden, die clientseitig in NoSQL-Datenbanken durchgeführt werden müssen, fassen Sie alles in eine Sammlung. Wenn Sie nicht sehr oft aktualisieren, können Sie dies tun

{
   _id,
   LastAccessDate,
   HasException,
   Account : {
        AccountID,
        UserName,
        Email },
   Device : {
        DeviceID,
        DeviceCode }
}

Dies führt zu doppelten Daten, aber wenn die Leistung (keine Verknüpfungen) vor der Speichereffizienz steht, ist dies wahrscheinlich eine geeignete Lösung für Sie. Da die Daten mehrfach gespeichert werden, sind Updates für den Server anspruchsvoller. D.h. Das Aktualisieren der E-Mail-Adresse würde so aussehen

db.myColl.update({"Account.UserName" : "User ToUpdate"}, {"$set" : {"Account.Email" : "[email protected]"} });

Da Sie AccountID und DeviceID nicht mehr zum Beitritt benötigen, können Sie diese beiden Felder auch weglassen.

Häufige Updates

Wenn Sie häufig Updates haben, können Sie anstelle des Einbettens Referenzen verwenden. Ich denke, Sie müssen sie clientseitig lösen. Sie haben dann drei Sammlungen:

Konto:

{
  _id,
  UserName,
  Email
}

Gerät:

{
  _id,
  DeviceCode
}

Assoziation:

{
  _id,
  account : {
        "$ref" : "Account",
        "$id" : ... }
  device : {
        "$ref" : "Device",
        "$id" : ... }
}

Du hast auf diese Weise keine Duplikate, musst aber mit Referenzen umgehen.