Mongoose - 使用单个集合的多个模式

Posted

技术标签:

【中文标题】Mongoose - 使用单个集合的多个模式【英文标题】:Mongoose - multiple schemas using single collection 【发布时间】:2012-11-20 00:02:55 【问题描述】:

我正在尝试规划我的api,例如:

/animals           // returns all animals
/animals/dogs      // returns all dogs
/animals/cats      // returns all cats
/animals/dogs/:id  // returns dog

因此,我为“猫”和“狗”设置了单独的模型,因为它们将包含独特的属性,但是它们都使用“动物”模式作为基础插件。

所以我的问题是关于在哪里存储数据,我的选择是:

1) 单一集合 - 将猫和狗都存储在一个集合中,这将使通过单一查询获取“/动物”的数据相对容易

2) 多个集合 - 将猫和狗都存储在单独的集合中,这将使数据存储更加合乎逻辑,但是在获取“/animals”的数据时将需要多次查询和连接该数据。

还有没有我遗漏的其他选项,或首选方法?

谢谢

【问题讨论】:

【参考方案1】:

您提到的选项是最适合您的问题的方法。

对于您的具体情况,如果每个模型的独特属性不是那么大采用方式 1 将所有数据存储在单个集合中并轻松查询。

否则,如果您的模型有点重并且有很多属性将它们分成不同的集合并通过它们各自的模型查询它们。这似乎需要做更多的工作,但至少会给您更多的抽象和灵活性来操作繁重的模型。 意思是选项 2

【讨论】:

我和 leepowell 处于同一点。但我的问题是关于你的回答。如果我选择#1,你对“不是那么大”的定义是什么?我知道您无法获得特定的可枚举元素。但是有没有一个球场号码,你会建议用 #2 而不是 #1?我正在开发一个数据库,其中将包含特定于远程学习课程对象的元素,包括已部署和正在开发的元素。还是#1和#2之间的“断点”是开发人员的偏好?【参考方案2】:

mongodb 的优点在于它是无模式的。听起来这正是您所需要的。我会考虑只使用普通的node-mongodb-native,并将所有动物存储在一个集合中。

【讨论】:

以上是关于Mongoose - 使用单个集合的多个模式的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mongoose 为单个帖子保存多个类别

Mongoose 模式和集合

从 MongoDB 和 Mongoose 中的多个文档创建单个文档

单个node.js项目中的Mongoose和多个数据库

单个node.js项目中的Mongoose和多个数据库

Mongoose 单个应用程序的多个数据库