【问题标题】:Get last child ID's of sub categories获取子类别的最后一个子 ID
【发布时间】:2019-11-12 17:16:02
【问题描述】:

我有一个 json 数据的类别数组,其结构如下。

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

  • 我应该得到与 id 匹配的类别。
  • 如果收到的类别对象有字段hasSubCategory=false,那么我应该返回类别文档作为响应。
  • 但是如果收到的category对象有字段hasSubCategory=true,我应该再次执行db操作,通过检查对象id是否匹配json数组的parentId来查询所有子类别。在这种情况下,如果子类别再次有hasSubCategory=true,需要另一个查询以使用json数组的parentId检查当前obj的id。当收到的子类别也有hasSubCategory=true,需要另一个查询。所以它应该查询直到hasSubCategory=false

简单来说,如果下面的对象有hasSubCategory=true,我应该检查整个json数据对象id是否匹配任何一个parentId。

在上面的 json 中,我们可以看到第一个对象的 _id 用其他对象的 parentId 表示。子类别的 _id 可以用作任何其他对象的 parentId。因此子类别可能有使用其 id 作为 parentId 的子类别。

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

我想要得到的最终结果是所有没有任何进一步子类别的类别 ID (hasSubCategory=false)

【问题讨论】:

    标签: javascript node.js mongodb


    【解决方案1】:

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

    例如:

    // Begin of your code
    category = /* MongoDB Query for getting the category obj through id */
    
    var myCategory = await findSubCat(category);
    

    返回我的类别;

    // 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;
     }
    

    【讨论】:

    • 谢谢..当我尝试上面的递归函数时,它返回了一个空的子数组
    • 你的 mogodb 查询是什么?一个承诺 ?如果是则正常,否则有问题!
    • 我正在使用异步等待 category = await mongodb.findOne({_id:new objectid (request.params.id)});
    • 好吧,你的问题中没有提到,所以这很关键。你必须修改递归函数,以便管理它......(我试了一下,但我没有你的代码,但你应该理解我希望的过程)
    • 它适用于第一个类别但由于递归函数不断替换更深层次的subCategory,它完全适用于一个类别及其所有子类别并且循环退出。所以下一个子类别被忽略..在第一个类别迭代完成后,我无法保留初始 subCategory[i]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-18
    相关资源
    最近更新 更多