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。
我希望这有道理!
欢呼!