【问题标题】:mongodb aggregation to get n level categorymongodb聚合得到n级类别
【发布时间】:2021-12-15 17:38:45
【问题描述】:

我有两个模式,产品和类别, 类别为n级


产品

{
_id,
name,
category
}

产品总是属于没有子类别的类别

和数据

    [
      {
       name:test1,
       category:ObjectId(id frontEnd category)
      },
      {
       name:test2,
       category:ObjectId(id mobile category)
      }
    ]

类别

{
name,
parentId
}

还有数据,它就像一棵树, mobile和web是root,frontEnd是leaf

[
  {
   name:web,
   parent:null
  },
  {
   name:frontEnd,
   parent:ObjectId(id web category)
  },
  {
   name:mobile,
   parent:null
  }
]

我希望当我得到产品数据时是这样的

[
     {
        name:test1,
        category:{
           name:frontEnd
           parent:{
              name:web
              }
           }
        },
     {
        name:test2,
        category:{
           name:mobile
           }
     }
 ]

【问题讨论】:

  • 给出是否可以完成样本数据,以及预期的结果
  • @Takis 我编辑了它,并解释更多

标签: mongodb aggregation


【解决方案1】:

经过澄清,递归查找是 OP 正在寻找的,它可以通过 $graphLookup 来实现

db.product.aggregate([
  {
    "$graphLookup": {
      "from": "category",
      "startWith": "$category",
      "connectFromField": "parent",
      "connectToField": "_id",
      "as": "parent"
    }
  }
])

这是Mongo playground 供您参考。

【讨论】:

  • 谢谢,但它对我不好,可能一个类别在 5 个级别,另一个类别在 2 个级别
  • 可以通过$graphLookup进行递归查找。您最终会将所有父级放在一个数组中,例如this。我认为您仍然需要知道回溯深度才能获得预期输出的确切形式。
  • 是的,我用过,谢谢
  • @AnasAlazmeh 更新了答案以反映您的意图递归查找
猜你喜欢
  • 1970-01-01
  • 2020-03-19
  • 2021-08-09
  • 1970-01-01
  • 2020-05-05
  • 2021-03-31
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多