关于mongodb 百万级数据 去重 查询优化的问题

现有一个企业表company,里面有100万的数据,对应一个员工表user,每个企业ID company_id对应0到多条user数据,员工表中有300万条数据;具体结构如下:

db.company.find()
{
    "_id" : ObjectId("5a4356fcac671b55711ba0f3"),
    "name":"某某企业"
    "create_time":Timestamp(1510644421, 1)
}
......

db.user.find()
{
    "_id" : ObjectId("5a4356fcac671b55711ba0f4"),
    "company_id":ObjectId("5a4356fcac671b55711ba0f3"),
    "status":0,
    "username":"小刘"
},
{
    "_id" : ObjectId("5a4356fcac671b55711ba0f4"),
    "company_id":ObjectId("5a4356fcac671b55711ba0f3"),
    "status":1,
    "username":"小马"
}

要找出所有没有员工的企业,包括company表在user里没有对应数据的,以及对应status为0的数据,每页显示十条,应该如何查找效率最快?

尝试过先找出user表里status里为1的company_id去重后取出一个数组,再用company表的_id去notin这个数组,但是数据里超过百万后,查询需要7s以上。

db.user.aggregate(
    {'$match':{'status':1}},
    {'$group':{'_id':'$company_id'}}
);

请问能够如何优化吗

阅读 3.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题