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

Sådan laver du indlejrede forespørgsler i MongoDb, der fungerer som indlejrede Sql-udvælgelsesforespørgsler

Svaret på sådanne spørgsmål i MongoDB er ofte at denormalisere dine data. Hvis du kun har brug for en liste over brugerne i gruppen, kan du gemme bruger-id'et og brugernavnet i gruppedokumentet. På nogle måder strukturerer du din database i overensstemmelse med det resultat, du ønsker at se på skærmen i stedet for at prøve at sætte den i et normaliseret format.

Det ville klart kun fungere, hvis din brugergruppeliste (med navne) kan passe ind i et enkelt dokument, men din nuværende tilgang har også nogle begrænsninger med hensyn til den maksimale størrelse af en gruppe.

En anden fremgangsmåde ville være at gemme de grupper, som en bruger tilhører, i et array på hvert 'Bruger'-dokument. Tilføj et indeks på det matrixfelt, og nu kan du finde brugere efter gruppe. I betragtning af at en bruger sandsynligvis tilhører færre grupper, end der er medlemmer i en gruppe, kan dette være den bedste tilgang her.

db.user.save({_id:"u1", name:"u1 name", groups:[{_id:"g1", name:"Group One"}, ...]});

Igen kan du gemme gruppenavnet med dets _id, så du straks kan få vist listen over grupper, som en bruger tilhører med en enkelt rundrejse. Selvfølgelig, hvis du tillader, at et gruppenavn ændres, bliver du nødt til at starte en baggrundsopgave for at rette op på alle disse kopier af navnet.

Jeg ville også bruge den indbyggede MongoDB id-generator frem for din egen, den har mange ønskværdige egenskaber.



  1. JedisPoolConfig kan ikke tildeles til GenericObjectPoolConfig

  2. Upload filer til DEFAULT_FILE_STORAGE i stedet for GridF'er med mongoengine

  3. Hvad er den maksimale værdistørrelse, du kan gemme i redis?

  4. Sådan gør du:Brugeren har fans