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

如何让MongoDB字段值随其他字段值动态变化?

嵌套任务状态同步需求与实现方案

修正后的数据结构

原数据存在语法错误,items字段应为数组(用于存储多个子任务),修正后结构如下:

{
  "name": "Task A",
  "completed": false,
  "no_of_items": placeholder1,
  "no_completed_items": placeholder2,
  "items": [
    {
      "name": "Task A1",
      "completed": false,
      "no_of_items": placeholder1,
      "no_completed_items": placeholder2,
      "items": placeholder3
    },
    {
      "name": "Task A2",
      "completed": false,
      "no_of_items": placeholder1,
      "no_completed_items": placeholder2,
      "items": placeholder3
    }
  ]
}

注:placeholder3代表多层嵌套的子任务结构

核心需求

  • placeholder1:当前任务items数组的元素总数(即子任务数量)
  • placeholder2:当前任务items数组中completed为true的子任务数量
  • 当no_completed_items等于no_of_items时,自动将当前任务的completed字段从false改为true;底层任务完成后,同步更新所有上层任务的完成状态

实现思路与代码示例

以JavaScript为例,通过递归函数处理多层嵌套的任务结构:

function updateTaskStatus(task) {
  // 处理无嵌套子任务的底层任务
  if (!task.items || task.items.length === 0) {
    task.no_of_items = 0;
    task.no_completed_items = 0;
    return task.completed;
  }

  // 计算子任务总数(placeholder1)
  task.no_of_items = task.items.length;
  // 统计已完成的子任务数量(placeholder2)
  task.no_completed_items = task.items.reduce((count, item) => {
    // 递归更新子任务状态,返回子任务是否完成
    const isItemDone = updateTaskStatus(item);
    return count + (isItemDone ? 1 : 0);
  }, 0);

  // 同步当前任务的完成状态
  task.completed = task.no_completed_items === task.no_of_items;

  return task.completed;
}

// 使用示例
const taskTree = {
  "name": "Task A",
  "completed": false,
  "items": [
    {
      "name": "Task A1",
      "completed": false,
      "items": [
        { "name": "Task A1-1", "completed": true, "items": [] },
        { "name": "Task A1-2", "completed": true, "items": [] }
      ]
    },
    {
      "name": "Task A2",
      "completed": false,
      "items": [
        { "name": "Task A2-1", "completed": true, "items": [] }
      ]
    }
  ]
};

updateTaskStatus(taskTree);
console.log(taskTree);

关键逻辑说明

  1. 递归遍历:从最底层任务开始向上处理,确保子任务状态先更新完成,再同步到上层
  2. 数量计算:直接通过task.items.length获取子任务总数;用reduce递归统计已完成子任务数量
  3. 状态同步:对比完成数与总数,自动切换当前任务的completed状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:05:22