我有一个很常见的用例——评论列表。每条评论都有一个作者。
我使用引用将评论中的引用存储给作者,因为作者可以发表多个评论。
现在我正在使用 ReactiveMongo 并想尝试保持数据库访问异步,但在这种情况下,我不知道如何。我对数据库进行异步访问以获取评论,但是对于每条评论我都必须获取作者,直到现在我知道的唯一方法是遍历评论并同步获取用户:
val userOption:Option[JsObject] = Await.result(usersCollection.find(Json.obj("id" -> userId).one[JsObject], timeout)
//...
除此之外,我可以:
异步获取每个用户,但是我必须引入一些功能来等到所有用户都被获取,以便返回响应,我的代码可能会变得一团糟。
存储完整的用户对象 - 至少我需要在每个评论中的评论(图片、名称等)。这种冗余可能会变得难以管理,因为每次用户更改某些内容(与评论中存储的数据相关)时,我都必须浏览数据库中的所有评论并对其进行修改。
在这里应用的正确模式是什么?