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

GraphQL Mutation不持久问题求助:无法更新/删除Todo项

解决Mongoose + GraphQL Yoga中Todo更新/删除无效的问题

你的代码里,更新和删除操作没有等待Mongoose异步方法完成就返回结果,这是导致操作无效的核心原因。Mongoose的findByIdAndUpdate、findByIdAndRemove都是异步函数,必须用await关键字等待数据库操作执行完毕,否则代码会直接跳过数据库操作返回true,实际没有修改数据库。另外createTodo里的todo.save()也建议加上await,避免潜在的异步时序问题。

修正后的Resolver代码:

resolvers: {
    Query: {
        todos: () => Todo.find()
    },
    Mutation: {
        createTodo: async (_, { text }) => {
            const todo = new Todo({ text, complete: false });
            // 加上await等待保存完成
            await todo.save();
            return todo;
        },
        updateTodo: async (_, { id, complete }) => {
            // 加上await等待更新操作完成
            const updatedTodo = await Todo.findByIdAndUpdate(id, { complete });
            // 可选:判断是否找到对应Todo,返回更准确的结果
            return !!updatedTodo;
        },
        removeTodo: async (_, { id }) => {
            // 加上await等待删除操作完成
            const removedTodo = await Todo.findByIdAndRemove(id);
            // 可选:判断是否成功删除,返回准确结果
            return !!removedTodo;
        }
    }
}

额外说明:

  • 加上await后,代码会等待Mongoose完成数据库操作再继续执行,确保你的更新/删除操作真正作用到数据库。
  • 通过判断findByIdAndUpdate/findByIdAndRemove的返回值,能确认是否找到对应的Todo文档,返回更精准的布尔结果(比如找不到时返回false),比直接返回true更合理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 08:30:51