MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Моделиране много към много :чрез с Mongoid/MongoDB

Моделирането на добра схема на Mongodb наистина зависи от начина, по който осъществявате достъп до вашите данни. В описания случай ще индексирате своя ключ members.user_id, което изглежда добре. Но размерът на вашия документ ще нарасне, тъй като ще добавите зрители, редактори и администратори. Освен това вашата схема ще затрудни извършването на заявки като:

Заявка за проекти, където user_id xxx е редактор:

Отново, може би не е необходимо да правите заявки за проекти като този, така че вашата схема изглежда добре. Но ако трябва да направите заявка за проектите си чрез user_id И роля, бих ви препоръчал да създадете колекция „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})

Или още по-лесно... добавете индекс към схемата на вашия проект:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Laravel 5 изпълнява агрегиране с mongodb on where клауза

  2. разрешения за директория с данни на mongodb

  3. Как да изчистите конзолата в MongoDB

  4. Как мога да генерирам ObjectId с mongoose?

  5. Множество бази данни (mongodb[mongoengine] и sql) с django 1.8