例如,我有模型User
和Post
用户
{
"_id": ObjectId("pretendThisIsAUserObjectId"),
"name": "someUser"
}
发表
{
"_id": ObjectId("pretendThisIsAUserObjectId"),
"title": "blah blah",
"user_id": ObjectId("pretendThisIsAUserObjectId"),
"content": "more blah"
}
用户有很多帖子。因此,我们user_id
存储了Post
。
因此,当我们列出每个用户的帖子时,我们将有N + 1个查询(N个帖子加上1个用户姓名查询),因为我们没有加入MongoDB。
我们还可以在Post
中存储用户名,以进行优化吗?
答案 0 :(得分:2)
简短的回答是是。您可以将数据归一化到您认为适合您特定需求的任何程度。您甚至可以在每个User
中存储整个Post
文档,但这将是愚蠢的重复数量。
然而,我的第一个倾向是考虑与每个用户ID关联的用户名的应用程序端缓存,而不是试图在Post
文档中包含该名称或每次都查询它想要它。
如果您的用户名是唯一的,则可以考虑将用户名设为_id
文档的User
,而不是标准ObjectId
。这使得您的用户ID更加有用,因为您不再需要执行其他查询来查找每个用户的名称,因为他们的名称是他们的ID。
答案 1 :(得分:0)