我有这种关系:
[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不支持子文档的唯一标识符。