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

MongoDB:eseguire query su più raccolte con due query?

Cercare di "creare una query "relazionale"" in MongoDB sarà un esercizio di frustrazione. Il tuo schema memorizza alcune informazioni (la valutazione del post) in una raccolta e altre informazioni (l'età dell'autore) in una raccolta diversa, ma tutte le query MongoDB operano su raccolte singole. A meno che tu non denormalizzi i tuoi dati (cosa che hai detto di non voler fare), avrai bisogno di un metodo a due passaggi per farlo funzionare.

Un approccio che dovrebbe funzionare sarebbe quello di creare un array di ID autore e utilizzarlo in una query della raccolta di post utilizzando '$in'. Ecco come potrebbe apparire in JavaScript usando la shell mongo:

> 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}});

La prima riga crea un array vuoto. La seconda riga crea un cursore che selezionerà il _id campi di tutti gli autori nella fascia di età target. La terza riga usa il cursore per popolare un array di _id dell'autore S. La quarta riga mostra tutti i post che corrispondono ai criteri di destinazione:autore _id nell'elenco costruiamo e valutiamo solo nell'intervallo da te specificato.