Как перевести этот алгоритм из 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 элементов, похоже с этим условием точно проще соединять на сервере а не в БД


Ответы (0 шт):