sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB:Frågar du flera samlingar med två frågor?

Att försöka 'skapa en "relationell" fråga' i MongoDB kommer att bli en övning i frustration. Ditt schema lagrar viss information (inläggets betyg) i en samling och annan information (författarens ålder) i en annan samling, men alla MongoDB-frågor fungerar på enstaka samlingar. Såvida du inte avnormaliserar din data (vilket du sa att du inte ville göra), behöver du en tvåstegsmetod för att få detta att fungera.

Ett tillvägagångssätt som borde fungera skulle vara att bygga en uppsättning författar-ID:n och använda den i en fråga i inläggssamlingen med hjälp av '$in'. Så här kan det se ut i JavaScript med mongo-skalet:

> 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örsta raden skapar en tom array. Den andra raden skapar en markör som väljer _id fält för alla författare i ditt målåldersintervall. Den tredje raden använder markören för att fylla i en array av författare _id s. Den fjärde raden visar alla inlägg som matchar dina målkriterier:författare _id i listan bygger vi bara och betygsätter i det intervall du angav.



  1. Använda Redis för köer för flera Laravel-applikationer på en enda server

  2. Mongolab anslutningsfel

  3. Verktyg för att skapa en visualisering från befintlig MongoDB

  4. Tilldela mongoose-returresultat till variabeln node js