我正在做一个项目,使用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
};
}
},
}
1条答案
按热度按时间j13ufse21#
如果你想更新记录,不需要在updateOne之后使用保存,而需要使用findOneAndUpdate(),例如:
上述查询将为您提供更新的记录
如果你想在两个集合上执行更新,那么你可以使用事务。
在mongoose中你可以通过使用transaction来实现它参考官方文档https://mongoosejs.com/docs/transactions.html