Node.js mongoose findByIdAndUpdate在graphql中未修改的模型数据上返回null
我在尝试使用graphql和.findByIdAndUpdate更新mongoose模式时遇到问题 每当我尝试更新文档时,新数据的值都会正确更新,但未修改的数据将变为null 因此,如果我在graphiql中运行这个:Node.js mongoose findByIdAndUpdate在graphql中未修改的模型数据上返回null,node.js,mongoose,graphql,Node.js,Mongoose,Graphql,我在尝试使用graphql和.findByIdAndUpdate更新mongoose模式时遇到问题 每当我尝试更新文档时,新数据的值都会正确更新,但未修改的数据将变为null 因此,如果我在graphiql中运行这个: mutation { updateProfile(id: "5b05b4cfd53486377061eab3", name: "dave") { id name age interests } } 它与此对象一起返回: { "data
mutation {
updateProfile(id: "5b05b4cfd53486377061eab3", name: "dave") {
id
name
age
interests
}
}
它与此对象一起返回:
{
"data": {
"updateProfile": {
"id": "5b05b4cfd53486377061eab3",
"name": "dave",
"age": null,
"interests": null
}
}
}
新数据已更新到文档中,但旧数据已被删除
其思想是能够只更新文档的一部分,而不会将其余部分变成null
负责更新的GraphQL代码:
updateProfile: {
type: profileType,
args: {
id: { type: new GraphQLNonNull(GraphQLID) },
name: { type: GraphQLString },
age: { type: GraphQLString },
interests: { type: GraphQLString },
},
resolve(parent, args) {
return Profile.findByIdAndUpdate(args.id, {
name: args.name,
age: args.age,
interests: args.interests
}, {new: true}, (err, Profile) => {
if (err) {
return res.status(500).send(err);
}
return;
});
}
}
下面是模式:
const profileSchema = mongoose.Schema({
name: String,
age: String,
interests: String,
});
感谢您的帮助,提前谢谢 这可以像下面的例子一样解决 以前,您是通过args params的值单独设置或更新字段的 您需要直接在findByIdAndUpdateargs.id中传递args参数,args如下代码所示 它将仅更新请求中的字段 在突变中:
我希望这对其他人有用,谢谢。查看您的个人资料。。。console.logProfileMongoose方法仅在忽略回调时返回承诺。有关更多详细信息,请参见中的常见场景6。
updateProfile: {
type: profileType,
args: {
id: { type: new GraphQLNonNull(GraphQLID) },
name: { type: GraphQLString },
age: { type: GraphQLString },
interests: { type: GraphQLString },
},
resolve(parent, args) {
return Profile.findByIdAndUpdate(args.id,args, (err, Profile)=> {
if(err) {
return res.status(500).send(err);
}
return
})
}
}