现有一个企业表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'}}
);
请问能够如何优化吗