连接 MongoDB 的最佳实践 [重复]

Posted

技术标签:

【中文标题】连接 MongoDB 的最佳实践 [重复]【英文标题】:Best practice for joins MongoDB [duplicate] 【发布时间】:2016-11-30 18:06:11 【问题描述】:

我正在构建一个基本上允许用户管理在线通讯录的应用程序。

我是一名 SQL 专家,习惯于规范化我的 Db。

我正在使用 MEAN 堆栈开发我的第一个应用,我需要帮助了解 MongoDb 的最佳实践。

我知道你可以在 Mongo 中进行连接,但根据我所读到的大多数建议是将所有内容存储到集合中的单个记录中。

就我而言,我有一个用户,他的帐户中可能有超过 1,000 个或更多联系人,每个联系人有超过 100 个字段。

我希望有很多 Mongo 开发经验的人可以插话并告诉我最佳实践是什么。您真的会拥有一份包含一千多个联系人的文档吗?规模如何?

【问题讨论】:

【参考方案1】:

在 NoSQL 中有一个普遍的问题,那就是:嵌入还是拥有一个单独的集合?

我的一般建议是考虑关系:

一对一?嵌入。 从一个到几个?照他们说的做.. 放入内部并避免加入 一对多?一条 MongoDB 记录可以容纳 16MB。所以很难通过。但是如果每条记录都很重,请进行选择查询指定所需的字段...否则查询会很重。 如果你真的不能通过嵌入来做到这一点..你需要单独的集合。而且你不会有真正的加入......你必须做“手动加入”:第一个查询来获取用户..第二个查询来获取他的联系人。但是要小心N+1 query problem(提示:您可以使用in 运算符,或者您可以依靠驱动程序功能来执行我从未尝试过的连接)。

但不要忘记:如果嵌入的实体要在其他地方使用......你不能嵌入,因为你最终会得到重复的数据(原则上)。或者你必须处理它(在某些情况下这不是问题)。

【讨论】:

谢谢路易斯。这对我来说很有意义。

以上是关于连接 MongoDB 的最佳实践 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

.NET MongoDB 连接的最佳实践?

MongoDB开发最佳实践

使用 Promises 时保留变量的最佳实践 [重复]

MongoDB进阶之路:不仅仅是技术研究,还有优化和最佳实践

mongodb最佳实践:筑巢

MongoDB / Mongoose 单元测试 - 最佳实践? [关闭]