sql >> Database >  >> NoSQL >> MongoDB

Veel-op-veel modelleren:door met Mongoid/MongoDB

Het modelleren van een goed Mongodb-schema hangt echt af van hoe u toegang krijgt tot uw gegevens. In uw beschreven geval indexeert u uw memberships.user_id-sleutel die in orde lijkt. Maar uw documentgrootte zal groeien naarmate u kijkers, redacteuren en beheerders toevoegt. Uw schema maakt het ook moeilijk om vragen te stellen zoals:

Vraag projecten op, waarbij user_id xxx de editor is:

Nogmaals, het is misschien niet nodig om projecten als deze op te vragen, dus je schema ziet er goed uit. Maar als u uw projecten moet opvragen op user_id EN rol, raad ik u aan een 'project_membership'-verzameling te maken:

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

Of nog eenvoudiger... voeg een index toe aan uw projectschema:

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



  1. Alle subdocumenten opvragen

  2. Stappen om MongoDB op Amazon Linux te installeren

  3. MongoDB met behulp van een OR-clausule in mongoengine

  4. MongoException:sleutels met een lengte van nul zijn niet toegestaan, heb je $ met dubbele aanhalingstekens gebruikt?