使用MongoDB的aggegrate组表现非常差

时间:2017-04-24 15:33:57

标签: mongodb

我有这种关系:

[boards] 1-n [threads] 1-n [posts] n-1 [users]

现在我想加载所有主板,每个主板的线程数,每个主板每个帖子的数量。

这是我的疑问:

db.getCollection('boards').aggregate([
    {
        $lookup : {
            from: "threads", 
            localField:"_id", 
            foreignField: "BoardId",
            as: "threads"
        }
    },
    { $unwind : "$threads" },
    {
        $lookup:{
            from: "posts",
            localField:"threads._id", 
            foreignField: "ThreadId",
            as: "threads.posts"
        }
    },
    { 
        $group: {
            _id: "$_id",
            threadCount: { $sum : 1},
            postCount : { $sum: { $size: "$threads.posts" }}
        }
    }
])

令人难以置信的缓慢。大约8秒钟(50个板,100k线程,1M个帖子)。 通常我想为每个查询加载更多,但为什么这会慢?只是因为小组?

我们希望使用不同的集合,因为专用标识符和MongoDB不支持子文档的唯一标识符。

0 个答案:

没有答案