Как перевести этот алгоритм из js в mongodb pipline
let collection_e = [
{
_id: "coll_e_obj_1",
title: "*obj_e title*",
},
];
let collection_d = [
{
_id: "coll_d_obj_1",
title: "*obj_d title*",
field_e: [
{ _id: "coll_e_obj_1", title: "*obj_d -> obj_e new title*" },
],
},
];
let collection_c = [
{
_id: "coll_c_obj_1",
title: "*obj_c title*",
field_d: [
{ _id: "coll_d_obj_1", title: "*obj_c -> obj_d new title*" },
],
},{
_id: "coll_c_obj_2",
title: "*obj_c title*",
}
];
let collection_b = [
{
_id: "coll_b_obj_1",
title: "*obj_b title1*",
field_c: [
{ _id: "coll_c_obj_1", title: "*obj_b -> obj_c new title*" },
],
},{
_id: "coll_b_obj_2",
title: "*obj_b title2*",
field_c: [
{ _id: "coll_c_obj_2", title: "*obj_b -> obj_c new title*" },
],
}
];
let collection_a = [
{
_id: "coll_a_obj_1",
field_b: [
{
_id: "coll_b_obj_1",
title: "*obj_a -> obj_b new title*",
field_c: [
{
_id: "coll_c_obj_1",
title: "*obj_a -> obj_b -> obj_c new title*",
field_d: [
{
_id: "coll_d_obj_1",
title: "*obj_a -> obj_b -> obj_c -> obj_d new title*",
},
],
},
],
},
{
_id: "coll_b_obj_2",
title: "*obj_a -> obj_b new title*",
}
],
},
];
console.clear();
function pipline(input) {
let r0 = collection_a.find((x) => x._id === input._id);
r0.field_b = r0.field_b.map((a) => {
let r1 = { ...collection_b.find((x) => x._id === a._id), ...a };
r1.field_c = r1.field_c.map((b) => {
let r2 = { ...collection_c.find((x) => x._id === b._id), ...b };
r2.field_d = r2.field_d?.map((c) => {
let r3 = { ...collection_d.find((x) => x._id === c._id), ...c };
r3.field_e = r3.field_e.map((d) => {
let r4 = { ...collection_e.find((x) => x._id === d._id), ...d };
//...
return r4;
});
return r3;
});
return r2;
});
return r1;
});
return r0;
}
console.log(pipline({ _id: "coll_a_obj_1" }));
в результате получается дерево объектов с подмененными полями или по умолчанию
не хотелось бы делать это на сервере
** массивы тоже должны соединяться с проверкой id элементов, похоже с этим условием точно проще соединять на сервере а не в БД