mongodb - 以高性能方式为 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
和。我已经完成了使用.email
sessions
email
createIndex({ email: 1 })
这里的会话范围可以在 1 到 1000 之间,并且它们内部有深度嵌套的数据。
因此,现在当会话增加时,假设 adam 有 200 个会话,文档大小也会增加,当我获取 adam 的文档时,整个文档会从数据库传输到前端,当文档有很多会话时,由于 db 驻留在cloud.mongodb.com
后端,因此需要很长时间服务器位于其他地方。
当会话数量较少时,假设为 8-10。大约需要 2 到 4 秒。
我想找到email
已经有索引的文档,然后在该用户的一个查询中只获取一半的会话。
例如
如果亚当有 50 个会话。获取亚当的文档,但会话对象应该只包含 25 个会话,这将减小大小并使查询更快,我可以在 UI 端加载更多选项,单击该选项将进行另一个查询以显示剩余的 25 个,或者在其他情况下我是接受建议。
在我的情况下如何提高性能?
提前致谢
解决方案
获取文档时是否使用了所有会话数据?如果您要获取整个文档,那应该是因为您需要整个文档。
如果您不需要整个文档,只需投影您需要检索的值。或者,仅将您需要的内容存储在文档中 - 例如最近的会话,将旧会话存储在不同的集合中。
在https://www.mongodb.com/blog/post/building-with-patterns-a-summary查看模式- 桶模式与异常值模式相结合可能会有所帮助。
推荐阅读
- python - 使用具有 2 种自定义颜色的 Matplotlib 在散点图中设置正值和负值的颜色
- asp.net-mvc - How to get Tags, Title, Subject Manager etc from powerpoint (or other) files in .net
- regex - 信用卡号码和详细信息的正则表达式
- ansible - 在 ansible 中找到的目录上添加粘性位
- java - Moving more than one node simultaneously in contiki-os (Mobility)
- ethereum - Web3 getTransaction returns null even in geth same
- storage - AnyLogic:将两个代理同时移动到托盘架中
- python - Nested custom directives in sphinx
- solana - 我想知道导致 solana 传输错误
- flutter - How to make an API request with selectableDayPredicate of flutter datePicker