连接的最佳实践 MongoDB

Best practice for joins MongoDB

我正在构建一个基本上允许用户管理在线地址簿的应用程序。

我是一个 SQL 人,习惯于规范化我的 Db。

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

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

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

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

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

我一般的建议是想到关系:

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

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