【问题标题】: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)

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

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

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案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。

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

    【讨论】:

    • 所以如果我理解正确,我可以在嵌入文档的选定元素中设置一个特定字段?...也就是说,假设我有一个包含测试文档数组的部分.我可以从该部分中仅选择一个测试并增加其中的通过值吗?
    • 是的,您只检索其中的一部分并更新单个数组元素,请在此答案stackoverflow.com/questions/15691224/…
    • 您可以在更新中使用 $ 运算符,这将为您带来魔力!
    • 太棒了,谢谢!我想我将使用带有嵌入式测试文档的摘要模型和部分模型。
    • 也可以在数组嵌入文档中查询stackoverflow.com/questions/17690545/…
    猜你喜欢
    • 2015-05-20
    • 1970-01-01
    • 2017-02-26
    • 2017-10-05
    • 2017-03-31
    • 2018-03-04
    • 2018-07-15
    • 2018-12-23
    • 2018-06-23
    相关资源
    最近更新 更多