MongoDB查询的复杂性 - 排序与两个查询

时间:2016-06-08 11:15:34

标签: mongodb big-o

我需要对mongodb的两个集合进行两次查询。

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

我需要发送几封带有多个模板的电子邮件,因此我会遍历所有邮件并检查是否已为其分配模板,然后查找模板。

我可以像

那样做
  1. 查找邮件
  2. 查找每封邮件的模板
  3. 或对其进行排序并检查模板是否已更改:

    1. 查找邮件并按模板排序(可以编入索引)
    2. 如果新模板不是旧模板,请找到模板
    3. 哪种方法复杂性较低?电子邮件比模板多得多。 (每小时1000封电子邮件,总共几百个模板)

      我听说过find-query需要O(log(n)+ m),其中n是集合中的数据量,m是将要获取的条目数量。

1 个答案:

答案 0 :(得分:0)

我在这种情况下可以提出的建议将基于:

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

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

此查询将获取每个matched电子邮件的模板,因此无需进行额外查询,数据库引擎将提供结果(一旦从磁盘读取模板,它将存储在内存中的页面中,所以内部缓存将启动以支持那个)