我正在写一个使用NodeJs从后端获取一些数据的代码,我希望数据库数据是这样的:
data = [{
name: "Admin",
id: '1',
children: [
{ name: "Admin", id: "1" },
{ name: "groupe1", id: "2" },
{
name: "groupe2", id: "1455", children: [
{ name: "groupe2", id: "1455" },
{ name: "gro", id: "5444" },
{ name: "hhrr", id: "45" }
]
}
]
}]
这个想法很简单,我们有一个组列表,每个组都有一个父组,我想以分层方式显示所有组列表,树的顶部一个已完成,一些组同时是父组和组,而另一些组只是组,如果该组不是父组,我们在其父组的子组数组中添加一个具有名称和ID的对象,如果该组是"这意味着它有孩子我们添加一个对象与它的ID和名称在数组中的儿童他的父母,我们添加属性儿童的对象是数组命名儿童与第一次对象与名称和ID的组等...
我试着这么做,但没有成功
const getParentsByType = async ({ name, _id }) => {
let parentResult = [
{
id: _id,
name: name,
children: [
{
id: _id,
name: name,
},
],
},
];
parentResult= await findParent(_id, parentResult[0].children, 0);
return parentResult;
};
const findParent = async (parentId, parentResult, itemPos) => {
let children = await Models.GroupModel.find({ parent: parentId, status: true }).select('name _id');
for (let i = 0; i < children.length; i++) {
let childrenList = await Models.GroupModel.find({ parent: children[i]._id, status: true }).select('name _id');
if (childrenList.length != 0) {
parentResult.push(buildParentWithChild(children[i]._id, children[i].name));
findParent(children[i]._id,parentResult.children[i],itemPos++)
} else {
parentResult.push(buildParent(children[i]._id, children[i].name));
}
}
return parentResult
};
这是数据库的模型
const Group = mongoose.Schema({
name: {
type: String,
required: true,
},
status: {
type: Boolean,
required: true,
},
parent: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Group',
},
});
我花了两天时间试图解决这个问题,但没有结果,我需要一些帮助,谢谢你
2条答案
按热度按时间e3bfsja21#
尝试解析你返回的数据。它验证你的数据作为对象我没有看到任何问题与您的函数无论我仍然不知道什么格式您试图建立。
nvbavucw2#
如果我没理解错的话,您需要转换
Models.GroupModel.find
返回的数组,如下所示这可以通过一个函数来完成,该函数将给定父
p
的所有子项相加,递归地包括它们的子项,如下所示:注意,这种方法只需要 * 一次 * 数据库访问(以填充
dbresult
),因此可能比findParent
函数更快。