我有一个具有以下结构的json数据类别数组。
{
"_id": "1",
"name": "First Category",
"hasSubCategory": "true",
"parentId": "0"
},
{
"_id": "2",
"name": "Second Category",
"hasSubCategory": "true",
"parentId": "0"
},
.
.
我的目标是当我将'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
)
答案 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;
}