我有一个非常常见的用例 - 评论列表。每个评论都有一个作者。
我使用引用存储评论中对作者的引用,因为作者可以发表多个评论。
现在我正在使用 ReactiveMongo 并希望尝试保持数据库访问异步,但在这种情况下,我不知道如何做。我对数据库进行异步访问以获取评论,但是对于每个评论,我都必须获取作者,到目前为止我知道的唯一方法是循环浏览评论并同步获取用户:
val userOption:Option[JsObject] = Await.result(usersCollection.find(Json.obj("id" -> userId).one[JsObject], timeout)
//...
除此之外,我可以:
此处应用的正确模式是什么?
我不久前解决了这个问题。
mongo 中没有连接。
您必须手动处理连接。
您的选择是:
- 循环遍历每个评论条目并为用户查询 mongo。这就是你正在做的事情。
- 从评论中获取所有用户 id,在 mongo 中查询匹配这些 id 的用户,然后注意将用户与评论相匹配。这正是您所做的,但进行了一些优化。
- 将用户嵌入评论中或将评论嵌入用户中。不推荐这个,这可能不是评论/用户的正确位置。
- 考虑在显示评论时需要用户提供哪组数据,然后将此信息嵌入到评论中
我最终选择了最后一个选择。
我们在每条评论中嵌入了用户 ID、名字和姓氏。
此信息不太可能更改(甚至可能在创建后不允许更改?)。
如果它可以改变,那么定制 update-user 方法来用新信息更新相关评论并不太难(我们也这样做了)。
所以现在不需要加入。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)