2016-06-08 81 views
0

我需要对MongoDB的两个集合执行两个查询。MongoDB查询的复杂性 - 分类与两个查询

一个数据库是电子邮件消息,另一个是电子邮件模板。

我需要发送几个电子邮件与几个模板,所以我遍历所有邮件和检查至极模板分配给他们,然后查找模板。

我能做到像

  1. 查找邮件
  2. 查找模板为每个邮件

或排序,并检查模板变化:

  1. 查找邮件和按模板排序(可索引)
  2. 如果新的t模板不是旧模板,找到模板

哪种方法复杂性较低?电子邮件比模板多得多。 (每小时1000封电子邮件与总共几百个模板)

我听说find-query需要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邮件模板,所以没有必要做额外的查询和数据库引擎提供的结果(一旦从磁盘读取模板,它将被存储在内存中的页面中,因此内部缓存将启动以支持该模板)