尝试使用graphql
和.findByIdAndUpdate
更新mongoose架构时遇到问题。
每当我尝试更新文档时,新数据都会正确更新,但未经修改的数据会变为空。
所以,如果我在graphiql中运行它:
mutation {
updateProfile(id: "5b05b4cfd53486377061eab3", name: "dave") {
id
name
age
interests
}
}
它返回此对象:
{
"data": {
"updateProfile": {
"id": "5b05b4cfd53486377061eab3",
"name": "dave",
"age": null,
"interests": 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,
});
提前感谢任何和所有帮助!
答案 0 :(得分:-1)
这可以像下面的示例一样解决。
以前,您是分别通过args参数的值来设置或更新字段的。
您需要像下面的代码一样直接在“ findByIdAndUpdate(args.id,args)”中传递args参数
它将仅更新请求中的字段。
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
})
}
}
我希望这对其他人有用,谢谢。