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

MongoDB:Forespørger på flere samlinger med to forespørgsler?

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.



  1. MongoDB Aggregation:Tilføj felt fra et indlejret dokument via en dynamisk feltsti

  2. Mongo C# Driver:Deserialize BsonValue

  3. Top 5 fordele ved Shared MongoDB Hosting

  4. Er der noget som Redis DB, men ikke begrænset til RAM-størrelse?