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

Hvordan ville du modellere et venskabsforhold i MongoDB?

MongoDB er generelt ikke en god egnet til modellering af grafrelationer. Der er specialiserede grafdatabaser, som udmærker sig til denne opgave.

Men når du ikke ønsker at tilføje en anden databaseteknologi til blandingen, vil jeg anbefale at oprette en ny samling venskaber og modeller hver ven-relation som et dokument med en række af to poster, hver af dem et objekt med den forkortede information om en af ​​brugerne, som du skal bruge for at vise en post i dine vennelister:

{ venskab:[ { id:123, navn:"Bob", avatar:"Bob.jpg" }, { id:456, navn:"Alice", avatar:"Alice.jpg" } ] }

Årsagen til at duplikere information fra brugerdokumenterne i venskabsdokumenterne er at undgå en anden forespørgsel til brugernes samling for at få alle data til at vise en brugers venneliste. MongoDB kan ikke lave JOINs kan kun udføre JOINs på ikke-delte samlinger , så du bør undgå at sprede data, du har brug for til en specifik use-case, over flere samlinger, selv når det betyder, at du opretter redundanser. Ellers ville du være nødt til at udføre flere forespørgsler efter hinanden, hvilket sænker responstiden for din ansøgning betydeligt.

Når du ønsker at hente vennelisten for bruger 123, udfører du en db.friendships.find({"friendship.id", 123}) (et indeks på friendship.id vil forbedre ydeevnen) og derefter modtage en liste over dokumenter, hvor Bob enten er den første eller den anden ven.

Du vil derefter gentage disse dokumenter og udsende den korte information om array-indgangen, som ikke er bruger 123.

Alternativt kan du filtrere Bob-posterne fra databasen med en aggregeringspipeline. Brug $match-forespørgslen ovenfor, $vind venskabsarrayet af og $match de dokumenter, hvor id ikke er 123. Dette ville være en afvejning:Du sparer båndbredde på bekostning af CPU-belastning på databaseserveren.

For at forespørge om et venskabsforhold allerede eksisterer, brug:

db.friendships.find( { $and:[ { "friendship.id":123 }, { "friendship.id":456 } ]} ).count(); 



  1. MongooseJS - Sådan gemmer du dokument og refererede dokument

  2. Hvad er en god strategi til at gruppere lignende ord?

  3. Hvordan hoster man et websted i NodeJS og MongoDB? Og hvad bliver prisen?

  4. MongoDB $weeklyUpdate #65 (15. april 2022):GDELT, Mongoose, &Hackathon Time!