我有一个用例,我需要查询NoSql表( AWS DynamoDb ),
会给我一个清单,
每个结果还需要在同一张表上进行查询。
我的表格有2个重要列-
1. sub_service_id
2. parent_id
查询是在表的 parent_id 列上进行的
每条记录只有1个parent_id,
但是parent_id可以出现在多行中,因此1个父级可以有多个子级。
除了第一个通话, parent_id 字段中的所有其余通话,
使用每条记录的 sub_service_id 完成。
如您在图像中所见,
第一个记录是第二个记录的父记录,
第二条记录是第三条记录的父项。
但是从理论上讲,第一,第二和第三条记录可以分别具有多个子记录。
可以使用主键(sub_service_id)或索引(parent_id)查询NoSql表(AWS DynamoDb)
我尝试了以下代码,但无法弄清逻辑-
var tree = {};
var requestBody = "";
module.exports.listServiceRelation = async (constants, requestBody) => {
let requestContext = requestBody.context;
requestBody = requestBody.request;
let connection = await dynamoDb.getDynamoConnection(constants);
console.log('db connection created!');
let apiResponse = await getSubServiceHierarchy(constants, connection, requestBody.service_id);
};
let getSubServiceHierarchy = async (constants, connection, parent_id) => {
let subServices = await dynamoDb.getSubServiceByParentId(constants, connection, parent_id);
if(subServices != undefined && subServices.Items != undefined && subServices.Items.length > 0){
let subServicesArr = [];
for(let i in subServices.Items){
let temp = {};
let currObj = subServices.Items[i];
temp.sub_service_id = currObj.sub_service_id;
temp.sub_service_name = currObj.sub_service_name;
temp.parent_id = currObj.parent_id;
subServicesArr.push(temp);
}
tree[parent_id] = subServicesArr;
for(let i in subServices.Items){
let currObj = subServices.Items[i];
let grandChildren = await dynamoDb.getSubServiceByParentId(constants, connection, currObj.sub_service_id);
if(grandChildren != undefined && grandChildren.Items != undefined && grandChildren.Items.length > 0){
getSubServiceHierarchy(constants, connection, grandChildren);
}
}
}
else{
return [];
}
};
对于我的用例,我需要伪代码逻辑的帮助,
我的输出必须是这样-
[
{
"sub_service_id": "1",
"parent_id": "main_service_id",
"children": [{
"sub_service_id": "2",
"parent_id": "1",
"children": [{
"sub_service_id": "3",
"parent_id": "2",
"children": []
}]
}]
},
{
"sub_service_id": "4",
"parent_id": "main_service_id",
"children": []
}
]