2016-06-08 2 views
0

Мне нужно сделать два запроса на две коллекции для mongodb.Сложность запросов MongoDB - сортировка по сравнению с двумя запросами

Одна база данных - это сообщение электронной почты, другое - шаблон электронной почты.

Мне нужно отправить несколько писем с несколькими шаблонами, поэтому я перебираю все письма и проверяю, какой шаблон им назначен, затем найдите шаблон.

я мог бы сделать это как

  1. Найти Почта
  2. Найти шаблон для каждого сообщения

или сортировать его и проверить, если шаблон изменен:

  1. Найти почту и Сортировка по шаблону (может быть проиндексирован)
  2. Если новый t шаблон не старый шаблон, найти шаблон

какой подход имеет меньше сложности? Есть больше писем, чем шаблонов. (1000 писем в час против нескольких сотен шаблонов)

Я слышал, что запрос на поиск принимает O (log (n) + m), где n - количество данных в коллекции, а m - сумма записей, которые будут извлечены.

ответ

0

, что я мог бы предложить в этом случае будет основываться на:

email { 
    _id, 
    /*all other fields*/ 
    templateId 
} 

db.emails.aggregate([{ 
      $match : { 
       "emailIsEnt" : false 
      } 
     }, { 
      $lookup : { 
       from : emailTemplates, 
       localField : templateId, 
       foreignField : _id, 
       as : "emailTemplate" 
      } 
     } 
    ]) 

этот запрос будет получать шаблоны для каждого matched электронной почты, так что нет необходимости делать дополнительный запрос и базы данных двигателя обеспечит результаты (после того, как шаблон будет считан с диска, он будет сохранен на странице в памяти, поэтому внутренний кеш начнется для поддержки этого)

Смежные вопросы