mongodb - 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 如何在后台工作的了解不足,无法知道这是否准确。反馈?
解决方案
推荐阅读
- python - python - setup.py sdist bdist_wheel
- json - 如何将我的 JSON 图像设置为 url 格式?
- angular - Angular 8:无法访问在 FileReader onloadend 方法中设置的类变量
- f#-data - F# - 使用 HtmlProvider 加载最后一行为空的表时出错
- syntax - 请解释 Tcl 规则 5 中的示例
- python - 如何创建模型以连接 pymongo 中的集合?
- r - 字符向量到 R 中的数据帧
- android - 将应用程序固定到 Amazon Trust Services CA
- python - 用熊猫中的另一个数据框替换行值的最简单方法?
- azure - Azure 中服务主体和托管标识之间的区别