首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB:寻找关于设计模式以提高查询效率的建议

MongoDB:寻找关于设计模式以提高查询效率的建议
EN

Stack Overflow用户
提问于 2021-09-02 21:47:47
回答 1查看 17关注 0票数 0

我是MongoDB的新手,我正在寻求关于设计模式的建议,然后再决定走这条路。我正在开发一个协作文档系统,用户可以创建文档并邀请其他用户进行协作,就像Google docs一样。

有两个集合。第一个存储文档,第二个存储合作者列表。当用户创建新文档时,他们会将协作者列表分配给此文档。在最简单的形式中,模式如下所示

文档架构包含一些数据,但它还维护对Collaborators集合中文档的引用

文档模型

代码语言:javascript
运行
复制
  {
       ....
      collaborators: ObjectId; // e.g. 0x507f1f77bcf86cd799439011
    } 

collaborators集合包含包含协作者角色数组的文档。

协作者模型

代码语言:javascript
运行
复制
{
     _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客户端,如果这是相关的。

EN

回答 1

Stack Overflow用户

发布于 2021-09-02 22:53:17

我意识到使用MongoDB聚合框架正是我所需要的。我能够使用$lookup$match stage来实现我想要的功能。仍然不确定这有多昂贵,因为$lookup将执行左连接。

这里有一个例子,如果有人想看的话。https://mongoplayground.net/p/RPheBZESC0H

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69037373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档