GraphQL 和 Mongoose 将属性覆盖为 null,并在突变中传递参数



我试图尽可能简化示例,因此如果需要任何其他信息,我可以提供它。假设我们有一个简单的模式嵌入了GraphQLObjectType:

const nameType = new GraphQLObjectType({
name: 'NameType',
fields: {
first: new GraphQLNonNull(GraphQLString),
last: GraphQLString,
},
});
const userType = new GraphQLObjectType({
name: 'User',
fields: () => ({
id: new GraphQLNonNull(GraphQLID),
name: new GraphQLNonNull(nameType),
email: new GraphQLNonNull(GraphQLString),
}),
});

所以我在这里有属性的第一个和最后一个名称。为了更新,我写了如下突变。有 GraphQLInputObjectType 表示为 NameType。

const nameType = new GraphQLInputObjectType({
name: 'NameInput',
fields: {
first: new GraphQLNonNull(GraphQLString),
last: GraphQLString,
},
});
const updateUser = {
name: 'UpdateUser',
type: userType,
args: {
id: new GraphQLNonNull(GraphQLID),
name: nameType,
email: GraphQLString,
},
resolve: (_, args, context) => User.findOneAndUpdate({ _id: args.id }, args, { new: true })
};

因此,当我传递带有name: {first: "Foo"}属性的任何突变时last总是得到null值的覆盖。如果我需要更改姓氏,我被迫传递以前的名字和新的姓氏。我希望有可能只更新一个第一个或最后一个,而不会影响另一个。我怎样才能联系到它?

这是因为 Mongoose 更新属性会整体修改嵌套对象。因此,如果我们需要在更新操作中深度合并,我们需要像这里这样的东西。

如果我们需要覆盖更多的嵌套层,我们可以在 while 循环中使用此代码。

相关内容

  • 没有找到相关文章

最新更新