设计猫鼬模型

Posted

技术标签:

【中文标题】设计猫鼬模型【英文标题】:Designing Mongoose Models 【发布时间】:2014-12-09 16:42:20 【问题描述】:

在前端,我有 3 个层次结构。

顶层显示测试摘要,其中包含通过/失败百分比、各种标签、运行 ID 等统计信息。

第二层由可以通过顶层运行 ID 访问的测试套件部分组成。这包含测试的名称,具体的通过/失败。

第三级是实际测试本身,带有报告、通过/失败状态等。

我为此使用 MEAN 堆栈,并且想知道使用 1,2 或 3 种不同的 Mongoose 模型在 MongoDB 中存储数据的权衡。我知道在数组中使用嵌入文档的一个问题是,我会在查询/更新而不是特定元素中获取整个数组。

选项 1)

使用 3 个模型,每个模型用于摘要、部分和测试。然后使用相同的 run_id 作为我可以将它们绑定在一起的值。

选项 2)

使用 2 个模型,摘要和部分。然后该部分有一个包含嵌入式文档的数组,每个文档都与特定的测试相关。

选项 3)

只有测试和部分模型,并在查询需要时创建摘要。

不确定这些信息是否足够,请告诉我,我可以尝试添加更多信息。谢谢

【问题讨论】:

【参考方案1】:

我只是在此声明中引用您的话:

我知道在数组中使用嵌入文档的问题之一 是我会在查询/更新中取回整个数组 而不是特定的元素。

根据 mongo find 的文档 http://mongoosejs.com/docs/api.html#model_Model.find

你有这些参数: 参数:

条件 [fields] 可选字段 [选项] 可选 [回调]

您可以查询并在您想要检索的任何 n 个字段上进行投影,并且只包含您需要的数据。

对我来说,mongo 中的大多数操作都是原子的,这就是为什么处理 mongo 它比处理数据库更容易,而且您也可以使用 $set 来更新文档的单个部分

Model.where( _id: id ).update( $set:  title: 'words' )

请记住,更新已嵌入文档的文档写入速度较慢,但​​读取速度较快,在另一种情况下,单独收集可能是另一种方式,对此没有直接的答案,有时您会必须进行反复试验,看看哪种更适合您的要求。 在您的情况下,我觉得您可以尝试使用嵌入式文档并查看它是如何工作的,或者您可以尝试选项 2。

我希望这是有道理的! 干杯!

【讨论】:

所以如果我理解正确,我可以在嵌入文档的选定元素中设置一个特定字段?...也就是说,假设我有一个包含测试文档数组的部分.我可以从该部分中仅选择一个测试并增加其中的通过值吗? 是的,您只检索其中的一部分并更新单个数组元素,请在此答案***.com/questions/15691224/… 您可以在更新中使用 $ 运算符,这将为您带来魔力! 太棒了,谢谢!我想我将使用带有嵌入式测试文档的摘要模型和部分模型。 也可以在数组嵌入文档中查询***.com/questions/17690545/…

以上是关于设计猫鼬模型的主要内容,如果未能解决你的问题,请参考以下文章

猫鼬设计模型中的嵌入式文档与参考?

猫鼬中的用户、帖子和评论模型

猫鼬模型测试需要模型

将模型参数传递给猫鼬模型

为啥猫鼬是这样设计的?

你如何从猫鼬中删除模型?