我有一个名为User
的MongoDB文档,其中包含以下模型:
var User = mongoose.schema({
_id: ObjectId,
name: String,
age: Number,
blog_posts: [ObjectID]
});
以及名为BlogPost
的文档,其中包含以下模型:
var BlogPost = mongoose.schema({
_id: ObjectId,
title: String,
author: ObjectId,
content: String,
date: Date
});
现在可以说这可以扩展到50,000多个用户和500,000多个博客帖子。如果我想找一个用户的博客文章,这将是一个更好的方法(在性能和代码可读性方面):
Approach 1:
搜索所有BlogPost
以查找匹配的作者= ObjectId。
Approach 2:
仅搜索BlogPost
,其ObjectId与User
blog_posts
数组中的ObjectId匹配。
似乎两种方法都需要搜索BlogPost
的所有100,000多条记录。在User
blog_posts
数组中存储ObjectId有什么好处?
答案 0 :(得分:0)
我对mongodb的经验是“避免”数组,如果你可以做两件事:
在这种情况下,您可以完全忘记user.brog_posts,因此请使用方法1。 在BlogPost.author上运行查询会更快更容易,因为您不必使用聚合框架,并且可以在单个对象上更高效地使用索引,然后在阵列上使用索引。
总而言之,如果您使用方法1,它将更快,更难以使用。