以一种性能良好的方式在mongodb中为用户获取嵌套对象



下面是我的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个键值对usernameemailsessions。我已经用createIndex({ email: 1 })email上做了索引。

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

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

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

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

例如

如果亚当有50节课。获取Adam的文档,但sessions对象应该只包含25个会话,这将减少大小并使查询更快,我可以在UI侧有加载更多选项,当单击该选项时,将进行另一个查询以显示剩余的25个会话或在其他情况下,我对建议持开放态度。

在这种情况下,我如何提高性能

提前感谢

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

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

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

最新更新