何时应该使用mongodb的聚合管道?

5

何时应该使用聚合管道?

场景:我有一些像这样的MongoDB文档

`

    {
    id:"",
    text:"",
    dept:"",
    group:"",
    parent:"",
    }

`

现在,我需要使用“parent”字段从中准备出一棵树形结构。
`

    tree:[
    {
    id:"",
    text:"",
    dept:"",
    group:"",
    parent:"",
    children:[
       {
         id:"",
         text:"",
         dept:"",
         group:"",
         parent:"",
    }]
    },{
    id:"",
    text:"",
    dept:"",
    group:"",
    parent:"",
    }]

`

现在,这个结构可能会被嵌套得非常深。尽管我可以编写一个聚合管道来创建这个结构,但问题是这个结构将经常准备好,比如每次刷新页面时。
我们应该使用管道还是将JSON文档存储在树形结构中呢?
1个回答

3
Mongo的优势在于它的NoSQL无模式结构。您需要利用它,而不是将数据存储在关系模型中。
因此,当您意识到需要获取大量嵌套数据时,建议以这样的方式对数据库进行建模,即将所有嵌套数据存储在单个文档中。结果,当您执行提取操作时,无需进行任何额外的计算。
有关更多信息,请参见此链接

但是如果没有需要在UI中使用所有嵌套数据的情况,只需要一个记录并且我始终需要它的键,那么按照Mongo的说法,我们将不会在数据库端或后端加入数据。 - Yashdeep Hinge
2
仅仅因为你在一个嵌套结构中存储数据,并不意味着你需要将每个字段都提供给用户界面。如果有50个属性被存储,但只有其中5个被用户界面使用,你需要使用 $project 来获取这5个属性。因此根据你最初的问题,你应该选择一个嵌套文档结构。 - Subhashree Pradhan
当您有可能在未来更改的数据重复时怎么办?仍然建议将与文档相关的所有数据嵌套在文档中吗?以一个愚蠢的例子为例 - 假设一个人对象包含一个房屋对象,该对象具有房间列表,并且每个房间都有一个电子设备列表,其中包含制造商、型号等字段...如果某些对象中的“制造商”是错误的,我必须在每个文档中更新制造商值。这是预期使用的方式吗? - mal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接