【问题标题】:When should we use the aggregation pipeline mongodb?我们什么时候应该使用聚合管道 mongodb?
【发布时间】:2019-01-02 04:18:14
【问题描述】:

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

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

`

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

`

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

`

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

`

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

【问题讨论】:

    标签: mongodb aggregation-framework querying


    【解决方案1】:

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

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

    如需更多信息,请参考this

    【讨论】:

    • 但是,是的,我得到了你,但是如果没有情况我需要 ui 中的所有嵌套数据,而只需要一条记录,我总是它的关键。用 mongo 的话来说,我们不会在 db 端和后端加入数据。
    • 仅仅因为您将数据存储在一个高度嵌套的结构中,并不意味着您需要将每个字段都提供回 UI。如果有 50 个属性正在被存储,但其中只有 5 个被 UI 使用,则需要使用 $project 来仅获取这 5 个属性。因此,根据您最初的问题,您应该更喜欢嵌套文档结构。
    猜你喜欢
    • 2021-09-07
    • 1970-01-01
    • 2011-07-04
    • 2017-09-13
    • 2021-12-29
    • 2011-07-17
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多