首页 > 解决方案 > 以高性能方式为 mongo db 中的用户获取嵌套对象

问题描述

下面是我的 mongo db 用户集合

// First Document
{
  username: 'adam',
  email: 'adam@gmail.com'
  sessions: {
    '121ED67': { pages: [] },
    '132EDD7': { pages: [] },
    '1111DD7': { pages: [] },
  }
}

// Second Document
{
  username: 'Levine',
  email: 'levine@gmail.com'
  sessions: {
    '121ED67': { pages: [] },
    '132EDD7': { pages: [] },
    '1111DD7': { pages: [] },
  }
}
.
.
.
so on...

每个文档有 3 个键值对username和。我已经完成了使用.emailsessionsemailcreateIndex({ email: 1 })

这里的会话范围可以在 1 到 1000 之间,并且它们内部有深度嵌套的数据。

因此,现在当会话增加时,假设 adam 有 200 个会话,文档大小也会增加,当我获取 adam 的文档时,整个文档会从数据库传输到前端,当文档有很多会话时,由于 db 驻留在cloud.mongodb.com后端,因此需要很长时间服务器位于其他地方。

当会话数量较少时,假设为 8-10。大约需要 2 到 4 秒。

我想找到email已经有索引的文档,然后在该用户的一个查询中只获取一半的会话。

例如

如果亚当有 50 个会话。获取亚当的文档,但会话对象应该只包含 25 个会话,这将减小大小并使查询更快,我可以在 UI 端加载更多选项,单击该选项将进行另一个查询以显示剩余的 25 个,或者在其他情况下我是接受建议。

在我的情况下如何提高性能?

提前致谢

标签: mongodbperformancedatabase-performance

解决方案


获取文档时是否使用了所有会话数据?如果您要获取整个文档,那应该是因为您需要整个文档。

如果您不需要整个文档,只需投影您需要检索的值。或者,仅将您需要的内容存储在文档中 - 例如最近的会话,将旧会话存储在不同的集合中。

https://www.mongodb.com/blog/post/building-with-patterns-a-summary查看模式- 桶模式与异常值模式相结合可能会有所帮助。


推荐阅读