我需要对mongodb的两个集合进行两次查询。
一个数据库是电子邮件,另一个是电子邮件模板。
我需要发送几封带有多个模板的电子邮件,因此我会遍历所有邮件并检查是否已为其分配模板,然后查找模板。
我可以像
那样做或对其进行排序并检查模板是否已更改:
哪种方法复杂性较低?电子邮件比模板多得多。 (每小时1000封电子邮件,总共几百个模板)
我听说过find-query需要O(log(n)+ m),其中n是集合中的数据量,m是将要获取的条目数量。
答案 0 :(得分:0)
我在这种情况下可以提出的建议将基于:
email {
_id,
/*all other fields*/
templateId
}
db.emails.aggregate([{
$match : {
"emailIsEnt" : false
}
}, {
$lookup : {
from : emailTemplates,
localField : templateId,
foreignField : _id,
as : "emailTemplate"
}
}
])
此查询将获取每个matched
电子邮件的模板,因此无需进行额外查询,数据库引擎将提供结果(一旦从磁盘读取模板,它将存储在内存中的页面中,所以内部缓存将启动以支持那个)