mongodb.find()搜索一百万个文档的有效方法?

mongodb.find()搜索一百万个文档的有效方法?,mongodb,performance,mongoose,database-design,mongoose-schema,Mongodb,Performance,Mongoose,Database Design,Mongoose Schema,我有一个博客帖子服务器,将包含数百万篇文章,我需要能够得到用户a写的所有文章 最好的模式设计是什么 1) 分离用户和文章文档,并让用户在所有百万记录中搜索用户id的文章 articles.find({Writer\u id:User\u A.id}) 2) 在用户架构中放置项目id引用。例: userSchema = { name: "name", age: "age", articles: [ {type:mongoose.Article_id}, {type:mon

我有一个博客帖子服务器,将包含数百万篇文章,我需要能够得到用户a写的所有文章

最好的模式设计是什么

1) 分离用户和文章文档,并让用户在所有百万记录中搜索用户id的文章

articles.find({Writer\u id:User\u A.id})

2) 在用户架构中放置项目id引用。例:

 userSchema = {
    name: "name",
    age: "age",
    articles: [ {type:mongoose.Article_id}, {type:mongoose.Article_id} ]
   }

然后搜索用户A并加入以取回文章。

最好保留
Writer\u id
方法并在该属性上创建索引。如果存储引用数组,则需要对
find()
调用执行
$in
操作。这将导致您的查询从一个匹配的
Article\u id
跳到另一个。如果您有一个
Writer\u id
和为该属性构建的索引,则所有用户的文章都将存在于索引中相同的顺序“块”中,无需任何跳跃。结果是读效率大大提高了
find()
操作

此外,文章数组方法需要频繁更新用户文档,而
Writer\u id
方法只需要插入。插入的效率令人难以置信,而频繁更新的效率相对较低。最后,一个
Article\u id
s数组可能(如果不太可能)导致达到16 MB文档大小限制。
Writer\u id
方法没有这样的限制


对于一个较小的项目,这种差异应该相对可以忽略不计,但是如果您希望实现可伸缩性,那么最好使用
Writer\u id
方法。

最好保留
Writer\u id
方法并在该属性上创建索引。如果存储引用数组,则需要对
find()
调用执行
$in
操作。这将导致您的查询从一个匹配的
Article\u id
跳到另一个。如果您有一个
Writer\u id
和为该属性构建的索引,则所有用户的文章都将存在于索引中相同的顺序“块”中,无需任何跳跃。结果是读效率大大提高了
find()
操作

此外,文章数组方法需要频繁更新用户文档,而
Writer\u id
方法只需要插入。插入的效率令人难以置信,而频繁更新的效率相对较低。最后,一个
Article\u id
s数组可能(如果不太可能)导致达到16 MB文档大小限制。
Writer\u id
方法没有这样的限制

对于一个较小的项目来说,这种差异应该相对可以忽略不计,但是如果您希望获得可伸缩性,那么最好使用
Writer\u id
方法