mongoose 无法在一个Mutation中更新两个Mongodb集合

yrwegjxp  于 2023-05-13  发布在  Go
关注(0)|答案(1)|浏览(99)

我正在做一个项目,使用node.js,使用graphql和mongodb作为后端数据库。在这个项目中,我有一个Project集合和一个EditedProject集合,其中包含用户对项目所做的编辑。此外,我有一个editProject突变,它将Project信息更改为基于originalProjectId的已批准的EditedProject信息。在这个变化中,我需要更新Project集合中的文档,并删除EditedProject集合中包含这些编辑的文档。我遇到的问题是只有Project集合正在更新。但是,如果我注解掉

const project = await Project.updateOne({"_id":new ObjectId(originalProjectId)}, 
            {$set: { 
            "date": input.date,
            "type": input.type, 
            "edited":'Approved', 
           }})
const editResult = await project.save();
const deleteEditedProject = await EditedProject.find({"originalProjectId":originalProjectId})
const deleteResult = await deleteEditedProject.save();

通过。在const project = await Project.updateOne({ ... const editResult = await project.save();之后,console.log(originalProjectId)在终端中不返回任何内容。这是因为.save()吗?有办法解决这个问题吗?我似乎不知道如何让它工作,我真的很感激任何帮助或建议。谢谢你!

import EditedProject from '../../models/EditedProject.js';
import Project from '../../models/Project.js';
import { requireAuth } from '../../services/auth.js';
import { ObjectId } from "mongodb";

export default { 
editeProject: async (_, {input}) => {
        try {
            const originalProjectId = input.originalProjectId
            const project = await Project.updateOne({"_id":new ObjectId(originalProjectId)}, 
            {$set: { 
            "date": input.date,
            "type": input.type, 
            "edited":'Approved', 
           }})
           const editResult = await project.save();
           console.log(originalProjectId)
           const deleteEditedProject = await EditedProject.find({"originalProjectId":originalProjectId})
           const deleteResult = await deleteEditedProject.save();        
           return originalProjectId;
            } 
         catch (error) {
            return {
            errorMessage:error.message
            };
            }
        },
}
j13ufse2

j13ufse21#

如果你想更新记录,不需要在updateOne之后使用保存,而需要使用findOneAndUpdate(),例如:

db.collection.findOneAndUpdate(filter, update,{new:1})

上述查询将为您提供更新的记录
如果你想在两个集合上执行更新,那么你可以使用事务。
在mongoose中你可以通过使用transaction来实现它参考官方文档https://mongoosejs.com/docs/transactions.html

相关问题