【发布时间】:2018-01-11 15:14:58
【问题描述】:
以下是我的 MongoDB 查询,用于显示组织列表以及每个组织的用户数。根据我的数据模型,“用户”集合有一个数组 userOrgMap,它维护用户所属的组织(按 orgId)。 “组织”集合不将分配的用户列表存储在其集合中。 “用户”集合有 11,200 个文档,“组织”有 10,500 个文档。
db.organizations.aggregate([
{$lookup : {from:"users",localField:"_id", foreignField:"userOrgMap.orgId",as:"user" }},
{ $project : {_id:1,name:1,"noOfUsers":{$size:"$user"}}},
{$sort:{noOfUsers:-1},
{$limit : 15},
{$skip : 0}
]);
没有排序,查询工作很快。使用排序,查询工作非常缓慢。大约需要 200 秒。
我什至尝试了另一种也需要更多时间的方法。
db.organizations.aggregate([
{$lookup : {from:"users",localField:"_id", foreignField:"userOrgMap.orgId",as:"user" }},
{$unwind:"$user"}
{$group :{_id:"$_id"},name:{"$firstName":"$name"},userCount:{$sum:1}},
{$sort:{noOfUsers:-1},
{$limit : 15},
{$skip : 0}
]);
对于上述查询,没有 $sort 本身需要更多时间。
需要有关如何解决此问题的帮助。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework