At prøve at 'oprette en "relationel" forespørgsel' i MongoDB vil være en frustrationsøvelse. Dit skema gemmer nogle oplysninger (indlæggets vurdering) i én samling og andre oplysninger (forfatterens alder) i en anden samling, men alle MongoDB-forespørgsler fungerer på enkelte samlinger. Medmindre du denormaliserer dine data (hvilket du sagde, at du ikke ville gøre), skal du bruge en to-pass metode for at få dette til at fungere.
En tilgang, der burde fungere, ville være at bygge en række forfatter-id'er og bruge den i en forespørgsel i postsamlingen ved hjælp af '$in'. Sådan kan det se ud i JavaScript ved hjælp af mongo-skallen:
> var authorList = [];
> var authorCursor = db.authors.find({age:{$gt:19,$lt:25}},{"_id":1});
> while(authorCursor.hasNext()){authorList.push(authorCursor.next()["_id"])};
> db.posts.find({"author.$id":{$in:authorList},rating:{$gt:6,$lt:9}});
Den første linje opretter en tom matrix. Den anden linje opretter en markør, der vil vælge _id
felter for alle forfattere i dit målaldersinterval. Den tredje linje bruger markøren til at udfylde en matrix af forfatter _id
s. Den fjerde linje viser alle indlæg, der matcher dine målkriterier:forfatter _id
på listen bygger vi lige og vurderer i det område, du har angivet.