You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归函数向嵌套数组添加数据后MongoDB未更新问题排查

问题:嵌套数组元素更新后MongoDB未同步,控制台输出正常

我尝试向包含多层嵌套数组的元素中添加数据,编写了递归函数以ID为依据遍历查找目标元素,添加新数据后控制台输出符合预期,但MongoDB中的数据并未更新,已无排查思路。

相关代码

import Folder from "../models/Folder";
import SubFolder from "../models/SubFolder";
import File from "../models/File";

export const createFolder = async (req, res) => {
  try {
    const { name, mainFolder, folderId } = req.body;

    if (!mainFolder && !folderId) {
      const newFolder = new Folder({
        name,
        rute: "esto va a ser la ruta",
        files: [],
        subFolders: [],
      });

      const folderSaved = await newFolder.save();

      res.json({
        message: "Carpeta creada",
        folder: folderSaved,
      });
    } else {
      const newSubFolder = new SubFolder({
        name,
        rute: "esto va a ser la ruta",
        mainFolder,
        files: [],
        subFolders: [],
      });

      if (mainFolder === folderId) {
        const findMainFolder = await Folder.findOne({ _id: mainFolder });

        findMainFolder.subFolders.push(newSubFolder);

        await findMainFolder.save();

        res.json({
          message: "Carpeta creada",
          folder: findMainFolder,
        });
      } else {
        const findMainFolder = await Folder.findOne({ _id: mainFolder });

        async function procesarSubCarpetas(folder) {
          for (const subFolder of folder.subFolders) {
            let subFolderId = subFolder._id;

            if (subFolder.subFolders.length > 0) {
              await procesarSubCarpetas(subFolder);
            }

            if (subFolderId.toString() === folderId) {
              subFolder.subFolders.push(newSubFolder);
              return;
            }
          }
        }

        await procesarSubCarpetas(findMainFolder);

        await findMainFolder.save();

        res.json({
          message: "Carpeta creada",
          folder: findMainFolder,
        });
      }
    }
  } catch (error) {
    console.error("Error al crear la carpeta:", error);
    res.status(500).json({ error: "Error al crear la carpeta" });
  }
};

控制台返回结果(符合预期)

{
    "message": "Carpeta creada",
    "folder": {
        "_id": "65b4cc91cf802c9ab1974106",
        "name": "Test1",
        "rute": "esto va a ser la ruta",
        "files": [],
        "subFolders": [
            {
                "name": "Test1",
                "rute": "esto va a ser la ruta",
                "mainFolder": "65b4cc91cf802c9ab1974106",
                "files": [],
                "subFolders": [
                    {
                        "name": "NewFile",
                        "rute": "esto va a ser la ruta",
                        "mainFolder": "65b4cc91cf802c9ab1974106",
                        "files": [],
                        "subFolders": [],
                        "_id": "65b4cf2852b5e3e59f172003",
                        "date": "2024-01-27T09:38:48.464Z"
                    }
                ],
                "_id": "65b4cc9dcf802c9ab1974108",
                "date": "2024-01-27T09:27:57.790Z"
            }
        ],
        "date": "2024-01-27T09:27:45.667Z"
    }
}

期望添加到SubFolders中的数据

{
 "name": "NewFile",
 "rute": "esto va a ser la ruta",
 "mainFolder": "65b4cc91cf802c9ab1974106",
 "files": [],
 "subFolders": [],
 "_id": "65b4cf2852b5e3e59f172003",
 "date": "2024-01-27T09:38:48.464Z"
}

内容的提问来源于stack exchange,提问作者SrPino23

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 05:07:28