繁体   English   中英

Mongoose模式/查询最佳实践(MongoDB,node.js)

[英]Mongoose schema/query best practices (MongoDB, node.js)

我试图在node.js应用程序中使用Mongoose分解我的RDBMS心态,并且可以使用一些指导来获得最佳实践。

一个简单的例子:假设有两个集合,组织和联系人。 这是一对多的关系,他们都需要孤独。 但是,在索引方法中,我想返回一个组织对象数组,每个组织对象都有一个成员联系对象数组。 (后来我想返回一组联系人,每个联系人都有一个组织对象。)

在我看来,我误解了实现这一目标的最佳方法。 这是我到目前为止看到的选项:

  1. 在组织文档中嵌入联系人及其ID。 然后索引查询可以是Organization.find({}, function(err, orgs) { orgs[n].contacts[n]...}) 缺点 :需要大量额外存储空间,并且必须在更改“主”联系人文档时更新嵌入式联系人文档。

  2. 利用Mongoose的populate / DBRef结构在两个表中存储“外键”ID。 然后查询可以是: Organization.find({}}.populate('contacts').run(...)缺点 :您必须在两侧存储密钥。

  3. 转到更传统的“外键”路线,只将组织ID存储在联系人文档中。 查询组织文档,然后查询组织查询的回调中的所有联系人,将数据合并到一个对象中以返回。 缺点 :多个查询和额外的处理开销(我相信我们必须独立地找到这些组织的组织和联系人,然后遍历每个组织,在公共_id字段上手动匹配,将它们组合成新的输出对象)。

我一定错过了一个更好的选择。 允许#3模式的东西,但返回所需的组合对象,开销更少。

注意异步模块似乎可以帮助解决这个问题,但这真的是唯一/最好的方法吗?

这实际上取决于您要进行的查询。 - 您的网站是否更多地依赖于联系人或组织? - 您是否经常需要显示组织中的所有联系人? - 您需要在组织页面上显示哪些联系人详细信息?

等等。

所以这真的取决于你的项目的需求。 您的组织和联系人页面是否在不断更新? 如果不是重复数据似乎不是一个坏主意,特别是如果你的网站更重读。

底线 :考虑一下您在网站上的页面以及需要显示的页面(因此需要进行哪些查询)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM