MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB:Запитване на множество колекции с две заявки?

Опитът за „създаване на „релационна“ заявка“ в 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 на автора в списъка, който просто изграждаме и оценяваме в диапазона, който сте посочили.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Асинхронен, обратни извиквания, затваряне, о, Господи

  2. Mongoose Query:Намерете елемент в масив

  3. Създаване на схеми на Mongoose със или без ключова дума „нова“?

  4. Как да се гарантира, че асинхронно повикване се изпълнява, преди да се върнете от функция в Mongoose?

  5. MongoDB/Mongoose - Запитване за масив от обекти по дата