面试题答案
一键面试存储设计
- 文档结构:保持题目给定的文档结构,即每个项目文档包含项目名称和一个
tasksGroups
数组,数组元素是包含taskList
数组的子文档。这样的结构符合项目 - 任务组 - 任务的层次关系,也便于理解和维护。
索引使用
- 建立复合索引:为了优化对特定任务的查询,在
tasksGroups.taskList
字段上建立索引。因为tasksGroups
是数组,taskList
也是数组,MongoDB支持对嵌套数组字段建立索引。在MongoDB Shell中,可以使用以下命令创建索引:
db.yourCollectionName.createIndex({"tasksGroups.taskList": 1});
这样的索引可以加快对特定任务的查询速度。
查询语句
使用$elemMatch
操作符结合$in
操作符来查询包含特定任务的项目。假设集合名称为projects
,查询包含'任务3'的项目的语句如下:
db.projects.find({
"tasksGroups": {
$elemMatch: {
"taskList": {
$in: ['任务3']
}
}
}
});
$elemMatch
操作符用于匹配数组中的元素,使得在tasksGroups
数组中找到包含taskList
数组里有'任务3'的子文档。$in
操作符用于检查数组中是否包含指定的值。