关于node.js:设计猫鼬模型

 2021-04-26 

Designing Mongoose Models

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

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

第二级包含测试套件的各个部分,可通过顶级运行ID进行访问。其中包含测试的名称,特定的测试通过/失败。

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

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

选项1)

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

选项2)

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

选项3)

仅具有测试模型和截面模型,并在查询需要时创建摘要。

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


我只是在这句话上引用你:

I know one of the issues with using embedded documents in an array
would be that I would get the whole array back in a query/update
instead of a specific element.

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

您具有以下参数:
参数:

  • 使适应
  • [fields]可选字段
  • [选项]可选
  • [打回来]

您可以查询要投影的n个字段并对其进行投影,并且仅包含所需的数据。

对我来说,在mongo中进行的大多数操作都是原子操作,这就是为什么与mongo相比,它比数据库更容易处理,但是您也可以使用$ set之类的文件来更新文档的单个部分,例如

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

请记住,写入文档时更新包含嵌入文档的文档的速度较慢,但??读取速度较快;在其他情况下,可能会有另外的收集方法,对此没有直接的答案,有时您会必须进行试错测试,然后查看更适合您要求的内容。
在您的情况下,我有种感觉,您可以尝试使用嵌入式文档并查看其工作方式,也可以尝试选项2。

我希望这有道理!
欢呼!