【发布时间】:2020-02-04 12:24:32
【问题描述】:
我的 mongodb 数据库中有两个集合,如下所示:
employee_details 包含大约 330000 个文档,其中 department_id 作为部门集合的参考
departments 包含 2 个字段 _id 和 dept_name
的集合
我已将索引添加到集合中,如下所示
db.departments.createIndex( { dept_name: 1 } )
db.employee_details.createIndex( { department_id: 1 } )
db.employee_details.createIndex( { employee_fname: 1 } )
我想通过加入两个集合来获取数据以在数据表中列出。但是当我尝试这样做时,我遇到了两个问题。
首先,当我在查找后添加排序时,查询运行需要很长时间,我在查找后添加了排序,因为我需要使用收集部门的 dept_name 进行排序。查询如下
db.getCollection("employee_details").aggregate([
{
$lookup: {
from: "departments",
localField: "department_id",
foreignField: "_id",
as: "Department"
}
},
{ $unwind: { path: "$Department", preserveNullAndEmptyArrays: true } },
{ $sort: { "Department.dept_name": 1 } },
{ $limit: 30 }
]);
第二次,当我在查找上方添加排序时,查询会变得很快,但如果我使用 dept_name 或 department_id 排序,结果会给出错误排序(排序适用于 employee_details 集合的字段)。查询如下
db.getCollection("employee_details").aggregate([
{ $unwind: { path: "$Department", preserveNullAndEmptyArrays: true } },
{ $sort: { "Department.dept_name": 1 } },
//{ $sort: { "department_id": 1 } }, // tried this also
{ $limit: 30 },
{
$lookup: {
from: "departments",
localField: "department_id",
foreignField: "_id",
as: "Department"
}
}
]);
有人可以提供一个优化的解决方案,用于从所有相关集合中获取数据以及排序。 提前谢谢你。
【问题讨论】:
-
您希望输出是什么样的或生成的数据集的用途是什么?
-
我在问题中提到过。考虑
departments集合中的样本数据,例如 cat1、cat2、cat3。大约有 3000000 名员工选择这 3 个部门中的任何一个。然后在问题中解释了问题。我不能在这里添加我的数据集,但有人可以用我的信息轻松创建数据集
标签: mongodb sorting limit lookup