我是MongoDB的新手,我正在寻求关于设计模式的建议,然后再决定走这条路。我正在开发一个协作文档系统,用户可以创建文档并邀请其他用户进行协作,就像Google docs一样。
有两个集合。第一个存储文档,第二个存储合作者列表。当用户创建新文档时,他们会将协作者列表分配给此文档。在最简单的形式中,模式如下所示
文档架构包含一些数据,但它还维护对Collaborators集合中文档的引用
文档模型
{
....
collaborators: ObjectId; // e.g. 0x507f1f77bcf86cd799439011
} collaborators集合包含包含协作者角色数组的文档。
协作者模型
{
_id: 0x507f1f77bcf86cd799439011; // refererenced by Document model
collaborators: [
{userId: 1, role: "editor"},
{userId: 2, role: "commenter}
]
}我将有一个获取所有这些文档的应用程序接口,其中登录用户的userId在文档引用的协作者列表中。如果没有编写高效查询的经验,我认为两步查找是可行的,但效率不是很高。
Step 1.找到所有包含userId的协作者列表,并获取其_id字段→
Step 2→查找包含在步骤1中找到的值之一的collaborators字段的所有文档
有没有更有效的方法来构造这个查询,特别是当用户频繁地获取这个列表的时候?
如果我应该以某种方式重新设计模式,以便能够高效地查找,我想知道。
我正在使用mongoose客户端,如果这是相关的。
发布于 2021-09-02 22:53:17
我意识到使用MongoDB聚合框架正是我所需要的。我能够使用$lookup和$match stage来实现我想要的功能。仍然不确定这有多昂贵,因为$lookup将执行左连接。
这里有一个例子,如果有人想看的话。https://mongoplayground.net/p/RPheBZESC0H
https://stackoverflow.com/questions/69037373
复制相似问题