MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Modelowanie wiele do wielu :za pomocą Mongoid/MongoDB

Modelowanie dobrego schematu Mongodb naprawdę zależy od tego, w jaki sposób uzyskujesz dostęp do danych. W opisanym przypadku zindeksujesz klucz Members.user_id, który wydaje się być w porządku. Ale rozmiar twojego dokumentu będzie rósł, gdy będziesz dodawać przeglądających, redaktorów i administratorów. Ponadto Twój schemat utrudni tworzenie zapytań takich jak:

Zapytanie o projekty, w których user_id xxx jest edytorem:

Ponownie, być może nie musisz wykonywać zapytań dotyczących projektów w ten sposób, więc Twój schemat wygląda dobrze. Ale jeśli potrzebujesz odpytywać swoje projekty według user_id ORAZ roli, sugerowałbym utworzenie kolekcji 'project_membership' :

db.project_memberships.insert(
  { 
    "project_id" : ObjectId("4d730fcfcedc351d67000032"),
    "editors" : [
      ObjectId("4d730fcfcedc351d67000002"),
      ObjectId("4d730fcfcedc351d67000004")
    ],
    "viewers" : [
      ObjectId("4d730fcfcedc351d67000002"),
      ObjectId("4d730fcfcedc351d67000004"),
      ObjectId("4d730fcfcedc351d67000001"),
      ObjectId("4d730fcfcedc351d67000005")
    ],
    "administrator" : [
      ObjectId("4d730fcfcedc351d67000011"),
      ObjectId("4d730fcfcedc351d67000012")
    ]
  }
)

db.project_memberships.ensureIndex({"editors": 1})
db.project_memberships.ensureIndex({"viewers": 1})
db.project_memberships.ensureIndex({"administrator": 1})

Lub jeszcze łatwiej... dodaj indeks do schematu projektu:

db.projects.ensureIndex({"memberships.role": 1})



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Problem C# MongoDb Connect to Replica Set Problem

  2. Zapytanie o konwersję tablicy na mapę dokumentów z n atrybutami

  3. Jak skonfigurować SELinux dla zestawów replik MongoDB?

  4. MongoDB:nie można użyć kursora do przechodzenia przez wszystkie dane

  5. Gdzie jest AccountKey dla CosmosDB w Azure Portal?