【问题标题】:How get recursive categories from mongodb with nodejs or javascript如何使用 nodejs 或 javascript 从 mongodb 获取递归类别
【发布时间】:2020-09-03 17:25:46
【问题描述】:

类别列表喜欢

预计结束

 [
    {
        "_id": "5f04bb4afce61722a8e3ca0f",
        "parentCategoryCode": null,
        "title": "Novelty",
        "childrens": [
            {
                "_id": "5f04bb8bfce61722a8e3ca19",
                "parentCategoryCode": "5f04bb4afce61722a8e3ca0f",
                "title": "Novelty Subcategory A",
                "childrens": [
                    {
                        "_id": "5f1081a5b2b56223a910bf25",
                        "parentCategoryCode": "5f04bb8bfce61722a8e3ca19",
                        "title": "Novelty Sub A Level 2"
                    }
                ]
            } 
        ]
    } 
     
]

我有 mongodb 数据库,我从单个集合中寻找递归类别。它可以是类别的多级深度关系

【问题讨论】:

标签: javascript node.js mongodb


【解决方案1】:

使用$graphLookup。它对集合执行递归搜索。带有 RestrictSearchwithMatch 选项的选项。

{
   $graphLookup: {
      from: <collection>,
      startWith: <expression>,
      connectFromField: <string>,
      connectToField: <string>,
      as: <string>,
      maxDepth: <number>,
      depthField: <string>,
      restrictSearchWithMatch: <document>
   }
}

员工收集示例

{ "_id" : 1, "name" : "Jack" }
{ "_id" : 2, "name" : "Peter", "reportsTo" : "Jack" }
{ "_id" : 3, "name" : "Sara", "reportsTo" : "Peter" }
{ "_id" : 4, "name" : "Zied", "reportsTo" : "Peter" }
{ "_id" : 5, "name" : "Richard", "reportsTo" : "Sara" }
{ "_id" : 6, "name" : "Mitch", "reportsTo" : "Zied" }

在这里,我们将 ReportsTo 与 Name 字段匹配。

db.employees.aggregate( [
   {
      $graphLookup: {
         from: "employees",
         startWith: "$reportsTo",
         connectFromField: "reportsTo",
         connectToField: "name",
         as: "reportingHierarchy"
      }
   }
] )

输出:

{
   "_id" : 1,
   "name" : "Jack",
   "reportingHierarchy" : [ ]
}
{
   "_id" : 2,
   "name" : "Peter",
   "reportsTo" : "Jack",
   "reportingHierarchy" : [
      { "_id" : 1, "name" : "Jack" }
   ]
}
{
   "_id" : 3,
   "name" : "Sara",
   "reportsTo" : "Peter",
   "reportingHierarchy" : [
      { "_id" : 1, "name" : "Jack" },
      { "_id" : 2, "name" : "Peter", "reportsTo" : "Jack" }
   ]
}
{
   "_id" : 4,
   "name" : "Zied",
   "reportsTo" : "Peter",
   "reportingHierarchy" : [
      { "_id" : 1, "name" : "Jack" },
      { "_id" : 2, "name" : "Peter", "reportsTo" : "Jack" }
   ]
}
{
   "_id" : 5,
   "name" : "Richard",
   "reportsTo" : "Sara",
   "reportingHierarchy" : [
      { "_id" : 1, "name" : "Jack" },
      { "_id" : 2, "name" : "Peter", "reportsTo" : "Jack" },
      { "_id" : 3, "name" : "Sara", "reportsTo" : "Peter" }
   ]
}
{
   "_id" : 6,
   "name" : "Mitch",
   "reportsTo" : "Zied",
   "reportingHierarchy" : [
      { "_id" : 1, "name" : "Jack" },
      { "_id" : 2, "name" : "Peter", "reportsTo" : "Jack" },
      { "_id" : 4, "name" : "Zied", "reportsTo" : "Peter" }
   ]
}

【讨论】:

    猜你喜欢
    • 2012-07-14
    • 2022-06-14
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多