sql >> Databáze >  >> NoSQL >> MongoDB

Jak převést relační formulář SQL z many-to-many na kolekci mongoDB?

Vidím několik řešení vašeho problému:

Zřídka aktualizace

Abyste se vyhnuli spojením, která je třeba provádět na straně klienta v NoSQL databázích, dejte vše do jedné kolekce. Pokud neaktualizujete příliš často, můžete to udělat

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

To má za následek duplicitní data, ale pokud výkon (žádná spojení) předchází efektivitě paměti, je to pro vás pravděpodobně vhodné řešení. Protože se data ukládají vícekrát, aktualizace jsou pro server náročnější. Tj. aktualizace e-mailové adresy by vypadala takto

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

Protože k připojení již nepotřebujete AccountID a DeviceID, můžete tato dvě pole také vypustit.

Časté aktualizace

Pokud máte časté aktualizace, můžete místo vkládání použít reference. Myslím, že je musíte vyřešit na straně klienta. Pak máte tři kolekce:

Účet:

{
  _id,
  UserName,
  Email
}

Zařízení:

{
  _id,
  DeviceCode
}

Přidružení:

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

Tímto způsobem nedochází k žádné duplicitě, ale musíte se vypořádat s referencemi.




  1. Zvyšte rlimit Mac OSX 10.8

  2. Jak vytvořit agregaci ze seznamu AggregationOperation v jarních datech MongoDB?

  3. Nodejs Mongodb aktualizuje více kolekcí

  4. Je kurzor.skip() na indexovaných klíčích vždy rychlejší?