title: GraphQL and Mongoose overwrite property to null with not passed argument in mutation
body: <p>I've tried to simplify example as possible so if any additional information needed I could provide it. Let's say we have easy Schema with embed GraphQLObjectType:</p>
  
  <pre><code>const nameType = new GraphQLObjectType({
    name: 'NameType',
    fields: {
      first: new GraphQLNonNull(GraphQLString),
      last: GraphQLString,
    },
  });
  
  const userType = new GraphQLObjectType({
    name: 'User',
    fields: () =&gt; ({
      id: new GraphQLNonNull(GraphQLID),
      name: new GraphQLNonNull(nameType),
      email: new GraphQLNonNull(GraphQLString),
    }),
  });
  </code></pre>
  
  <p>So I have name with properties first and last here. For updating I've written mutation as below. There is GraphQLInputObjectType represent as NameType.</p>
  
  <pre><code>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) =&gt; User.findOneAndUpdate({ _id: args.id }, args, { new: true })
  };
  </code></pre>
  
  <p>So when I'm passing any mutation with <code>name: {first: "Foo"}</code> property <code>last</code> always get overrides with <code>null</code> value. I'm forced to pass previous first name and new last name if I need to change last name. I would like to have a possibility to update only one first or last without affect another. How I can reach it out?</p>