带有大量文档的 MongoDb 聚合查找?
Posted
技术标签:
【中文标题】带有大量文档的 MongoDb 聚合查找?【英文标题】:MongoDb aggregate lookup with large number of documents? 【发布时间】:2020-10-10 06:12:22 【问题描述】:我正在使用 MongoDB 并尝试进行聚合查找。 $lookup 的“from”属性中使用的集合中的文档数量为数千。 现在,这会占用所有 CPU 并花费大量时间来响应。
但如果我将文档删除到几百个,它仍然很慢,但比以前快得多。
这是聚合查找的正常行为吗?如果我有大量文档,我是否应该考虑其他事情?
请推荐
【问题讨论】:
只要您有正确的索引,聚合可能需要几毫秒。举例说明您的聚合查询、您的文档并列出您的索引。 谢谢! @Robert Seaman 实际上我正在做的聚合非常简单,但仍然需要几分钟。让我解释一下这个场景。所以有两个集合,一个是User,另一个是Notification。通知有一个字段type
。我想获取所有具有特定类型通知的用户。通知集合有数千个文档,我已经索引了 _id 和 type 字段。您认为推荐的方法是什么?
那么,您要汇总 2 个集合?如果您提供文档结构、查询和索引的实际示例会更好。
@RobertSeaman 是的,它涉及两个集合。 Here 是我使用 explain() 得到的。我在 _id 和类型字段上有索引。
【参考方案1】:
也许您应该先找到通知,然后将它们与用户一起加入。 像这样的:
db.getCollection('notifications').aggregate(
[
$match:
type: "type to search"
,
$lookup:
from : 'users',
localField : 'userId',
foreignField : '_id',
as: 'users'
,
$unwind: "$users"
,
$group:
_id: "$users"
,
$replaceRoot: newRoot: "$_id"
]
)
【讨论】:
以上是关于带有大量文档的 MongoDb 聚合查找?的主要内容,如果未能解决你的问题,请参考以下文章