我在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阶段?
谢谢。
答案 0 :(得分:0)
用$match
交换$lookup
。首先$lookup
时,您首先要查找所有文档,然后再过滤它们。如果先过滤它们,则会减少查找文档的数量,从而提高性能。