Mongodb聚合$ lookup和组非常非常慢

时间:2020-06-15 15:26:20

标签: mongodb aggregate

我在mongodb上使用了聚合。 此聚合将获取与“ user.isLogin:true”匹配的文档数。

db.getCollection('example').aggregate([
{
    $lookup: {
    from: "users",
    localField: "userId",
    foreignField: "userId",
    as: "user"
    }
},
{$match: {user.isLogin : true}},
{$unwind:user}
{ $count: "total_count" }
])

此聚合现在需要4秒钟以上。 当我删除$ count时,它需要0.064秒。

当我使用$ count时,如何加速至0.173秒? 我知道$ count与$ group:{_ id:null,total_count:{$ sum:1}}相同,所以这个问题是如何在$ lookup阶段之后加快$ group阶段?

谢谢。

1 个答案:

答案 0 :(得分:0)

$match交换$lookup。首先$lookup时,您首先要查找所有文档,然后再过滤它们。如果先过滤它们,则会减少查找文档的数量,从而提高性能。