sql >> Database teknologi >  >> NoSQL >> MongoDB

Modellering af mange-til-mange:gennem med Mongoid/MongoDB

Modellering af et godt Mongodb-skema afhænger virkelig af, hvordan du får adgang til dine data. I dit beskrevne tilfælde vil du indeksere din memberships.user_id nøgle, hvilket virker ok. Men din dokumentstørrelse vil vokse, efterhånden som du tilføjer seere, redaktører og administratorer. Dit skema vil også gøre det vanskeligt at lave forespørgsler som:

Forespørgselsprojekter, hvor user_id xxx er editor:

Igen, du behøver måske ikke at forespørge projekter som dette, så dit skema ser fint ud. Men hvis du har brug for at forespørge på dine projekter efter user_id OG rolle, vil jeg anbefale dig at oprette en 'project_membership'-samling:

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})

Eller endnu nemmere... tilføje et indeks på dit projektskema:

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



  1. Hvad er den bedste måde at gemme fødselsdatoer i MongoDB?

  2. Sådan finder du dokument og enkelt underdokument, der matcher givne kriterier i MongoDB-samlingen

  3. Sådan fjerner du et dokument inde i et array i mongodb ved hjælp af $pull

  4. MongoDb 2.6.1 Fejl:17444 - Ældret punkt er uden for grænserne for sfærisk forespørgsel