mongodb - 在栅栏上:MongoDB 的 $graphLookup 与非图聚合以及如何最好地设置 Mongoose 模式?
问题描述
背景
我正在构建一个 Nodejs/Mongoose 后端。它连接到 MongoDB 数据库。我的数据包括院系、课程和课程。每个学院都由几个课程组成。每门课程都是一个但可能是多个项目的一部分。将来我可能会添加更多:例如学生、教师、课程。搜索空间可能会显着嵌套。
例如,我的后端应用程序旨在获取特定程序的课程。或获取教师的课程。而且还可以将新课程或计划落实到位或更新现有课程或计划。
我绑定到 MongoDB。
问题
如何最好地使用 Mongoose 设置我的模式?我有两个选择。(1) 使用引用设置模式来表达院系、项目和课程之间的联系——并使用 MongoDB 的 $filter/find 或任何其他非图形方法来查找感兴趣的课程或项目。或者 (2) 以一种为使用 MongoDB 的 $graphLookup 查找感兴趣的课程或程序而优化的方式设置模式。
注意我可以想象,与遍历所有案例以检查特定条件的方法相比,在我的案例中使用 $graphLookup 在计算上的要求较低。
我刚开始这个项目,想避免以后后悔。
问题
最好的前进方式是什么?优缺点都有什么?一个人的优缺点是否明显胜过另一个人?
所有这一切都假设这些确实是要考虑和比较的两个选项。
设置 Mongoose 模式时需要考虑什么?
现状
课程和项目文件分别包含有关它们所属的项目或教师的信息。我想到了 $filter 。
// Faculty schema
const facultySchema = new mongoose.Schema({
name: {
full: String,
short: String
}
})
// Program schema
const programSchema = new mongoose.Schema({
name: {
full: String,
short: String
},
type: String,
// Part of what faculty (ObjectId)?
partOf: [{id: String}]
})
// Course schema
const courseSchema = new mongoose.Schema({
_id: String,
name: {full: String},
courseCoordinator: String,
// Part of what program (ObjectId)?
partOf: [
{
id: String,
startPeriod: Number,
endPeriod: Number,
year: Number
}
]
})
但是如果我把它转过来(例如,包含有关它们包含哪些课程的信息的程序文档),我可以 $graphLookup 使用最大深度为 1 或 2 来查找感兴趣的程序或课程(见下图)。
谢谢你。
解决方案
推荐阅读
- azure - 压力测试 Azure 应用服务会定期停止处理请求
- fortran - 无法使用链接 IRAF 库重定位 R_X86_64_32 的错误
- android - Recyclerview ListAdapter 未更新
- java - 如果应用请求权限,如何获取?
- apache-spark - 使用 Pyspark 从 svd 组件重建矩阵
- javascript - D3:图表不显示 x 和 y 轴
- c# - 谁能用 C# 中的多维数组解释
- java - 如何从扩展活动覆盖方法?
- python - 站立的选择不做任何事
- python - ModuleNotFoundError:没有名为“脚本”的模块,但脚本实际存在且目录精确