我们什么时候应该使用mongodb聚合管道?

Yas*_*nge 5 querying mongodb aggregation-framework

我什么时候应该使用聚合管道?

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

`

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

`
Run Code Online (Sandbox Code Playgroud)

现在我需要使用父字段准备一个树结构。

`

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

`
Run Code Online (Sandbox Code Playgroud)

现在这个结构可以被大量嵌套。根据我的知识,我可以编写一个聚合管道来制作这个结构。但问题是这个结构将被频繁地准备,就像每次刷新页面时一样。我们应该使用管道还是应该将 json 文档按原样存储在树结构中。

Sub*_*han 3

Mongo 的优势在于其 NoSQL 无模式结构。您需要利用它而不是将数据存储在关系模型中。

因此,当您意识到需要获取大量嵌套数据时,建议以将所有嵌套数据存储在单个文档中的方式对数据库进行建模。因此,当您进行提取时,无需对其进行任何额外的计算。

有关同一内容的更多信息,请参阅

  • 仅仅因为您将数据存储在高度嵌套的结构中,并不意味着您需要将每个字段提供回 UI。如果存储了 50 个属性,但 UI 仅使用其中 5 个属性,则需要使用 `$project` 来仅获取这 5 个属性。因此,根据您原来的问题,您应该更喜欢嵌套文档结构。 (2认同)