2016-07-26 71 views
0

我正在构建一个基本上允许用户管理在线通讯录的应用程序。加入MongoDB的最佳实践

我是一个SQL人,我习惯正常化我的Db。

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

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

在我的情况下,我有一个用户,他们的账户中可能有超过1000个或更多的联系人,每个联系人有超过100个字段。

我希望有很多Mongo开发人员可以参加并告诉我最佳实践是什么。你真的有一个文件超过一千个联系人?这个规模如何?

回答

1

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

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

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

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

+0

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