【问题标题】:MongoDb aggregate lookup with large number of documents?带有大量文档的 MongoDb 聚合查找?
【发布时间】:2020-10-10 06:12:22
【问题描述】:

我正在使用 MongoDB 并尝试进行聚合查找。 $lookup 的“from”属性中使用的集合中的文档数量为数千。 现在,这会占用所有 CPU 并花费大量时间来响应。

但如果我将文档删除到几百个,它仍然很慢,但比以前快得多。

这是聚合查找的正常行为吗?如果我有大量文档,我是否应该考虑其他事情?

请推荐

【问题讨论】:

  • 只要您有正确的索引,聚合可能需要几毫秒。举例说明您的聚合查询、您的文档并列出您的索引。
  • 谢谢! @Robert Seaman 实际上我正在做的聚合非常简单,但仍然需要几分钟。让我解释一下这个场景。所以有两个集合,一个是User,另一个是Notification。通知有一个字段type。我想获取所有具有特定类型通知的用户。通知集合有数千个文档,我已经索引了 _id 和 type 字段。您认为推荐的方法是什么?
  • 那么,您要汇总 2 个集合?如果您提供文档结构、查询和索引的实际示例会更好。
  • @RobertSeaman 是的,它涉及两个集合。 Here 是我使用 explain() 得到的。我在 _id 和类型字段上有索引。

标签: database mongodb mongoose mongodb-query nosql


【解决方案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" }
        }
    ] 
)

【讨论】:

    猜你喜欢
    • 2020-11-23
    • 2020-05-17
    • 2017-07-31
    • 2017-03-18
    • 2023-03-30
    • 2018-07-09
    • 1970-01-01
    • 2019-11-13
    相关资源
    最近更新 更多