【发布时间】:2018-11-03 21:47:47
【问题描述】:
我在尝试使用 graphql 和 .findByIdAndUpdate 更新 mongoose 架构时遇到问题。
每当我尝试更新文档时,新数据都会正确更新,但未修改的数据会变为空。
所以如果我在 graphiql 中运行它:
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,
});
感谢任何和所有帮助,在此先感谢!
【问题讨论】:
-
检查你的
Profile...console.log(Profile) -
Mongoose 方法仅在您省略回调时才返回承诺。有关详细信息,请参阅this answer 中的常见场景 #6。