首页 > 解决方案 > MongoDB/Mongoose 中的可扩展性:使用 Model.find() 搜索一个集合还是使用双向引用搜索第二个集合更好?

问题描述

我正在开发一个具有 CRUD 功能的应用程序,并试图确定可扩展性的最佳架构,如果我的应用程序起飞的话。用户在我的应用程序中创建帖子,每个帖子都保存在 MongoDB 文档中。我的控制器函数将用户 _id 添加到文档中,这样我就知道是谁创建了它。

我想要快速检索给定用户创建的所有文档的选项。假设我的数据库中最终有数十万个文档。哪种方法更好?

(1) 有一个集合。使用 Mongoose 函数Model.find( {addedBy:[_id]} )检索给定用户创建的每个文档。不过我的理解是,这需要扫描集合中的每个文档(尽管我可能是错的)。

(2) 有第二个集合称为Ownership。当用户在主数据库中创建文档时,我链接了第二个函数,该函数在其中找到文档Ownership并添加对所述文档的引用。然后,当我想查看一个用户的所有文档列表时,我可以运行Ownership.findOne({user:[_id]}).populate(). 更快,因为 Mongoose 可以在找到相关文档的那一刻停止搜索,我想。主数据库中的文档删除将需要类似的链接。

选项 (2) 对我来说听起来要快得多,但要非常直接,我对 MongoDB 和 Mongoose 如何在后台工作的了解不足,无法知道这是否准确。反馈?

标签: mongodbmongoose

解决方案


推荐阅读