【发布时间】:2021-09-03 08:18:57
【问题描述】:
我对 MongoDB 还很陌生,在我承诺走这条路之前,我正在寻找有关设计模式的建议。我正在开发一个协作文档系统,用户可以在其中创建文档并邀请其他用户进行协作,就像 Google 文档一样。
有两个集合。第一个存储文档,第二个存储协作者列表。当用户创建一个新文档时,他们会为该文档分配一个协作者列表。在最简单的形式中,架构看起来像这样
Document 模式包含一些数据,但它还维护对 Collaborators 集合中文档的引用
文档模型
{
....
collaborators: ObjectId; // e.g. 0x507f1f77bcf86cd799439011
}
Collaborators 集合包含包含协作者角色数组的文档。
合作者模型
{
_id: 0x507f1f77bcf86cd799439011; // refererenced by Document model
collaborators: [
{userId: 1, role: "editor"},
{userId: 2, role: "commenter}
]
}
我将有一个 API 来获取登录用户的 userId 在文档引用的协作者列表中的所有文档。如果没有太多编写高效查询的经验,我认为两步查找会起作用,但效率不会很高。
Step 1 → 查找所有包含userId的合作者列表,并获取他们的_id字段
第 2 步 → 查找所有具有包含第 1 步中找到的值之一的合作者字段的文档
有没有更有效的方法来构造这个查询,特别是如果用户经常获取这个列表?
如果我应该以某种方式重新设计架构以提高查找效率,我想知道。
如果相关,我正在使用猫鼬客户端。
【问题讨论】:
标签: mongodb mongoose aggregation-framework