sql >> Database >  >> NoSQL >> MongoDB

Hoe een veel-op-veel-relatie van SQL naar mongoDB-verzameling te converteren?

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.




  1. 'process.nextTick(function() { throw err; })' - Undefined is geen functie (mongodb/mongoose)

  2. Hoe wordt $maxDistance gemeten in MongoDB?

  3. Real-time applicatie newbie - Node.JS + Redis of RabbitMQ -> client/server hoe?

  4. Redis:Is ZADD beter dan O(logN) wanneer het ingevoegde element aan het begin of het einde staat?