Опитът за „създаване на „релационна“ заявка“ в MongoDB ще бъде упражнение за разочарование. Вашата схема съхранява част от информацията (оценка на публикацията) в една колекция и друга информация (възрастта на автора) в друга колекция, но всички MongoDB заявки работят върху единични колекции. Освен ако не денормализирате данните си (което казахте, че не искате да правите), ще ви трябва метод с две преминавания, за да работи това.
Подход, който трябва да работи, би бил да се изгради масив от идентификатори на автори и да се използва в заявка на колекцията от публикации, използвайки '$in'. Ето как може да изглежда в JavaScript с помощта на mongo shell:
> 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}});
Първият ред създава празен масив. Вторият ред създава курсор, който ще избере _id
полета на всички автори във вашата целева възрастова група. Третият ред използва курсора за попълване на масив от _id
на автора с. Четвъртият ред показва всички публикации, които отговарят на вашите целеви критерии:_id
на автора в списъка, който просто изграждаме и оценяваме в диапазона, който сте посочили.