mongodb - MongoDB - 如何像在关系数据库中一样执行连接
问题描述
您可能已经猜到了,我来自 RDBMS 背景。
我在 MongoDB 中制作了一个文档模型。简单的表示如下:
收藏users
{
"_id": <ObjectId>,
"name": "Simon",
"photo": "https://...jpg"
}
收藏:Posts
{
"_id": <ObjectId>,
"author": ObjectId(<AdIdFromUsers>),
"likes": [ ObjectId(<AdIdFromUsers>), ObjectId(<AdIdFromUsers>) ],
"comments": [
{
"author": ObjectId(<AdIdFromUsers>),
"content": "Hi everyone!",
"likes": [ ObjectId(<AdIdFromUsers>), ObjectId(<AdIdFromUsers>) ],
"replies": [
{
"author": ObjectId(<AdIdFromUsers>),
"content": "Hi everyone!",
"likes": [ ObjectId(<AdIdFromUsers>), ObjectId(<AdIdFromUsers>) ],
}
]
}
]
}
我从 mongodb 文档中读到,在大多数情况下可以使用Manual Reference 。
但我的问题是,如何优化它以向数据库发出数百个请求以获取有关帖子的信息?喜欢:
- 先获取post文件
- 然后循环浏览评论和回复并获取作者信息
- 循环喜欢并获得每个用户
如果我采取了错误的方法,请随时纠正我
解决方案
根据我的经验,这在我看来是完全正常的。我也是这样做的。在我的后端,当我想从我的实际文档中获取多个子文档时,我会通过一个for
循环,收集信息,将其存储在一个数组中,然后将响应返回给用户。
以下是一些优点:
- 您不必为您拥有的每种类型的文档创建单独的集合
- 据我所知,它有点慢,但绝对应该完成这项工作
- 您可以将所有信息保存在一个地方
推荐阅读
- swift - 在 Swift 中将 cookie 添加到 webview.load
- spring - 当没有persistence.xml时如何使用EclipseLink静态编织JPA实体,因为实体由Spring管理
- python-3.x - valueerror 尝试将值(类型模型)转换为张量
- bash - 在 linux 命令行上发送 4 个字节的 HEX
- python - 如何在后台继续执行正在运行的python进程
- sql-server - MSSQL 在 ORDER BY 列表的位置 1 中遇到常量表达式
- ios - 如何使用 AudioKit 音序器设置不在轨道末尾的循环?
- php - 使用 WordPress wp_mail 发送具有不同主题和消息的多封邮件
- android - 崩溃:tid:com.facebook.react.WebSocketModuleQueue RCTSRWebSocket.m SocketRocket:处于调试模式。允许连接到任何根证书
- java - 在 PHP 代码加密中转换 Java AES 加密