节点JS:获取子类别的最后一个子ID

时间:2019-07-02 05:39:30

标签: javascript node.js mongodb

我有一个具有以下结构的json数据类别数组。

    {
        "_id": "1",
        "name": "First Category",
        "hasSubCategory": "true",
        "parentId": "0"
    },
    {
        "_id": "2",
        "name": "Second Category",
        "hasSubCategory": "true",
        "parentId": "0"
    },
    .
    .

我的目标是当我将'id'作为路由参数传递时

  • 我应该获取与ID相匹配的类别。
  • 如果收到的类别对象具有字段hasSubCategory=false,那么我应该返回类别文档作为响应。
category = /* MongoDB Query for getting the category obj through id */
response.send(category)
  • 但是,如果接收到的类别对象具有字段hasSubCategory=true,我应该再次执行db操作,通过检查对象ID是否与json数组的parentId相匹配来查询所有子类别。 ,如果子类别再次具有hasSubCategory=true,则需要另一个查询以json数组的parentId检查当前obj的ID。当收到的子类别也具有hasSubCategory=true时,则需要另一个查询。因此它应该查询直到hasSubCategory=false

简而言之,如果以下对象具有hasSubCategory=true,则应检查整个json数据,以确定对象id是否与任何parentId匹配。

  {
        "_id": "1",
        "name": "First",
        "hasSubCategory": "true",
        "parentId": "0"
    },
    {
        "_id": "2",
        "name": "Second",
        "hasSubCategory": "true",
        "parentId": "1"
    },
    {
        "_id": "3",
        "name": "Third",
        "hasSubCategory": "true",
        "parentId": "1"
    },

在上面的json中,我们可以看到第一个对象的_id用另一个对象的parentId表示。

我尝试了什么?

category = /* MongoDB Query for getting the category obj through id */
if(category.hasSubCategory == 'false')
{
    response.send(category)
}
else
{
let finalArr=[]
subCategory = /* MongoDB Query for getting the category obj through id */
for(i=0;i<subCategory.length;i++)
{
    if(subCategory.hasSubCategory == 'false')
        {
            finalArr.push(subCategory)
        }
    else
        {
        //Another query and it goes on
        }
 }
} 

这些类别可能具有更深层次的子类别,而有些却没有。我正在尝试使其具有动态性。

我试图获得的最终结果是所有类别ID,其中没有任何其他子类别(hasSubCategory=false

1 个答案:

答案 0 :(得分:1)

您必须使用递归函数...

例如:

// Begin of your code
category = /* MongoDB Query for getting the category obj through id */

var myCategory = await findSubCat(category);

返回myCategory;

// somewhere else you set this function
async findSubCat(category) {

    if(category.hasSubCategory == 'false')  {
            return category;
    }

    subCategory = /* MongoDB Query for getting the category obj through id */
    var children = [];

    for(i=0;i<subCategory.length;i++)
    {
            var mySubCat = subCategory[i];
            var myChildren = await findSubCat(mySubCat);
            children.push(myChildren);
    }

    category.children = children;

    return category;
 }
相关问题