Node.js mongoose findByIdAndUpdate在graphql中未修改的模型数据上返回null

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

我在尝试使用graphql和.findByIdAndUpdate更新mongoose模式时遇到问题

每当我尝试更新文档时,新数据的值都会正确更新,但未修改的数据将变为null

因此,如果我在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,
});

感谢您的帮助,提前谢谢

这可以像下面的例子一样解决

以前,您是通过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
            }) 
        }
    }