2016-06-08 85 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郵件模板,所以沒有必要做額外的查詢和數據庫引擎提供的結果(一旦從磁盤讀取模板,它將被存儲在內存中的頁面中,因此內部緩存將啓動以支持該模板)